当在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; } 

DefaultAllocMethodAllocMethod的java子类

allocator的类型是Allocator ,它是一个具有上面描述的getter和setter的java类。

任何人都可以解释发生了什么? 谢谢

您的设置者的类型@Nullable AllocMethod是Kotlin的AllocMethod? ,不符合getter类型@NotNull AllocMethod ,这是Kotlin的AllocMethod

错误信息意味着由于类型不匹配,只有getter被视为属性。 所以从Kotlin的角度而不是一个var allocMethod你有val allocMethodfun setAllocMethod(...)

请记住,一个AllocMethod? 是一个Any?AllocMethod是一个Any 。 这有助于理解为什么这些getter和setter不匹配。