在Java对象的Kotlin中设置属性时出现奇怪的"Val无法重新分配"错误

yco*_*omp 4 kotlin

奇怪的是,我的Kotlin代码之前编译得很好,当它在java类中看起来像这样Allocator:

public void setAllocMethod(@NotNull AllocMethod allocMethod) {
    this.allocMethod = allocMethod;
}
Run Code Online (Sandbox Code Playgroud)

但是当我将java类的setter改为:

public void setAllocMethod(@Nullable AllocMethod allocMethod) {
    this.allocMethod= allocMethod;
}
Run Code Online (Sandbox Code Playgroud)

然后当我编译项目时,我在调用java对象的kt文件中得到了这个Kotlin错误:

Val无法重新分配

allocator.allocMethod = DefaultAllocMethod() // kotlin code

这里也是java getter:

public @NotNull AllocMethod getAllocMethod() {
        if (allocMethod == null) allocMethod = DefaultAllocMethod.newDefault();
        return allocMethod;
}
Run Code Online (Sandbox Code Playgroud)

DefaultAllocMethod 是一个java的子类 AllocMethod

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

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

vod*_*dan 7

你的二传手的类型@Nullable AllocMethod,即Kotlin的AllocMethod?类型@NotNull AllocMethod,与吸气剂类型不匹配,这是Kotlin的AllocMethod

错误消息的含义是,由于类型不匹配,因此只将getter视为属性.所以从Kotlin的观点来看,而不是var allocMethod你拥有val allocMethodfun setAllocMethod(...)