奇怪的是,我的Kotlin代码编译得很好,在java类Allocator
中看起来像这样:
public void setAllocMethod(@NotNull AllocMethod allocMethod) {
this.allocMethod = allocMethod;
}
但是当我改变了java类的时候#39;这是:
public void setAllocMethod(@Nullable AllocMethod allocMethod) {
this.allocMethod= allocMethod;
}
然后当我编译项目时,我在调用java对象的kt文件中得到了这个Kotlin错误:
Val无法重新分配
allocator.allocMethod = DefaultAllocMethod() // kotlin code
这里也是java getter:
public @NotNull AllocMethod getAllocMethod() {
if (allocMethod == null) allocMethod = DefaultAllocMethod.newDefault();
return allocMethod;
}
DefaultAllocMethod
是AllocMethod
allocator
的类型为Allocator
,这是一个具有上述getter和setter的java类。
任何人都可以解释发生了什么吗?感谢
答案 0 :(得分:7)
您的二传手的类型@Nullable AllocMethod
,即Kotlin的AllocMethod?
,与获取者类型@NotNull AllocMethod
不匹配,这是Kotlin的AllocMethod
错误消息的含义是,由于类型不匹配,因此只将getter视为属性。因此,从Kotlin的角度而不是var allocMethod
,你有val allocMethod
和fun setAllocMethod(...)
答案 1 :(得分:0)
请注意,AllocMethod?
是Any?
而AllocMethod
是Any
。这有助于理解为什么这些吸气剂和制定者不匹配。