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

时间:2016-11-19 18:34:23

标签: kotlin

奇怪的是,我的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;
}

DefaultAllocMethodAllocMethod

的java子类

allocator的类型为Allocator,这是一个具有上述getter和setter的java类。

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

2 个答案:

答案 0 :(得分:7)

您的二传手的类型@Nullable AllocMethod,即Kotlin的AllocMethod?,与获取者类型@NotNull AllocMethod不匹配,这是Kotlin的AllocMethod

错误消息的含义是,由于类型不匹配,因此只将getter视为属性。因此,从Kotlin的角度而不是var allocMethod,你有val allocMethodfun setAllocMethod(...)

答案 1 :(得分:0)

请注意,AllocMethod?Any?AllocMethodAny。这有助于理解为什么这些吸气剂和制定者不匹配。