我有以下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?我已经搜索过类似的问题,例如this和this,但找不到答案。
对于Kotlin,这不是可变属性。 setNullableJavaField
预期为String
,而getNullableJavaField
返回String?
,因此也返回nullableJavaField
。因此,您必须直接使用设置器。
val jv = JavaClass()
jv.setNullableJavaField("Foo")