在Kotlin中使用带有@NotNull setter和@Nullable getter的Java字段

问题描述 投票:2回答:1

我有以下Java类:

public class JavaClass {

    private String nullableJavaField;

    @Nullable public String getNullableJavaField() {
        return nullableJavaField;
    }

    public void setNullableJavaField(@NotNull String nullableJavaField) {
        this.nullableJavaField = nullableJavaField;
    }
}

目的是nullableJavaField最初可能为null,但是任何后续的set操作都应仅具有非null值。从另一个Java类调用时,它可以按预期工作:

JavaClass jv = new JavaClass();
jv.setNullableJavaField(null); // Produces warning about passing null parameter

但是,等效的Kotlin代码产生错误“无法重新分配Val”:

val jv = JavaClass()
jv.nullableJavaField = "Foo" // Produces error "Val cannot be reassigned"

据我所知,nullableJavaField不是最终值,所以Kotlin为什么抱怨分配给val?我已经搜索过类似的问题,例如thisthis,但找不到答案。

java kotlin nullable
1个回答
0
投票

对于Kotlin,这不是可变属性。 setNullableJavaField预期为String,而getNullableJavaField返回String?,因此也返回nullableJavaField。因此,您必须直接使用设置器。

val jv = JavaClass()
jv.setNullableJavaField("Foo")
© www.soinside.com 2019 - 2024. All rights reserved.