当在Java对象的Kotlin中设置属性时,奇怪的“Val不能被重新分配”错误
奇怪的是,我的Kotlin代码编译好之前,看起来像这样的java类Allocator
:
public void setAllocMethod(@NotNull AllocMethod allocMethod) { this.allocMethod = allocMethod; }
但是当我改变了Java类的setter到这个:
public void setAllocMethod(@Nullable AllocMethod allocMethod) { this.allocMethod= allocMethod; }
那么当我编译这个项目时,我在调用java对象的kt文件中得到这个Kotlin错误:
瓦尔不能被重新分配
allocator.allocMethod = DefaultAllocMethod() // kotlin code
这里也是java getter:
public @NotNull AllocMethod getAllocMethod() { if (allocMethod == null) allocMethod = DefaultAllocMethod.newDefault(); return allocMethod; }
DefaultAllocMethod
是AllocMethod
的java子类
allocator
的类型是Allocator
,它是一个具有上面描述的getter和setter的java类。
任何人都可以解释发生了什么? 谢谢
您的设置者的类型@Nullable AllocMethod
是Kotlin的AllocMethod?
,不符合getter类型@NotNull AllocMethod
,这是Kotlin的AllocMethod
错误信息意味着由于类型不匹配,只有getter被视为属性。 所以从Kotlin的角度而不是一个var allocMethod
你有val allocMethod
和fun setAllocMethod(...)
请记住,一个AllocMethod?
是一个Any?
而AllocMethod
是一个Any
。 这有助于理解为什么这些getter和setter不匹配。