当前位置: 首页 > 知识库问答 >
问题:

在Java对象的Kotlin中设置属性时出现奇怪的“Val不能被重新分配”错误

郜俊晤
2023-03-14

奇怪的是,我的Kotlin代码以前编译得很好,当时它在java类分配器中是这样的:

public void setAllocMethod(@NotNull AllocMethod allocMethod) {
    this.allocMethod = allocMethod;
}

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

public void setAllocMethod(@Nullable AllocMethod allocMethod) {
    this.allocMethod= allocMethod;
}

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

无法重新分配Val

public @NotNull AllocMethod getAllocMethod() {
        if (allocMethod == null) allocMethod = DefaultAllocMethod.newDefault();
        return allocMethod;
}

共有1个答案

尉迟宣
2023-03-14

setter的类型@nullable allocMethod是Kotlin的allocMethod?与getter的类型@notnull allocMethod不匹配,这是Kotlin的allocMethod

错误消息的意思是,由于类型不匹配,只有getter被视为属性。因此,从Kotlin的角度来看,不是var allocmethod,而是val allocmethodfun setAllocMethod(...)

 类似资料:
  • 问题内容: 我和之间有关系 所以当我尝试持久化对象时 我懂了 如您所见,它尝试插入正确的值,但是以某种方式将其标记为语法错误。我认为它缺少左右的单引号,但是由于它是在后台进行查询的,所以我不知道如何解决它。请注意,我对同一项目中的其他实体执行了完全相同的操作,并且工作正常。太沮丧了!! 问题答案: GROUP确实是保留的关键字,您必须对其进行转义。在JPA 2.0中,有一种标准化的方法来指定分隔标

  • 问题内容: 这有效: 但这不是: 为什么?我有一种感觉,这与对象是内置类有关,但是我发现这并不令人满意,因为我在MyClass的声明中没有进行任何更改。 问题答案: Python将属性存储在字典中。您可以将属性添加到,看到它具有 : 重要的区别是没有属性。

  • 我使用AirBnB的代码样式,这使得ESLint抛出一个错误: 分配到函数参数“el”时出错无参数重新分配 如何操作作为参数传递的DOM对象,同时符合AirBnB的代码风格? 有人建议使用引用另一个问题,但如果我没有弄错的话,这适用于反应,但不适用于本机DOM操作。 我也不认为改变代码风格是一个答案。我相信使用标准样式的好处之一是在项目之间拥有一致的代码,随意更改规则感觉就像滥用了AirBnB这样

  • 在这里,在有趣的交换中,我试图用b1更改a1的值,但它显示“val不能被重新分配编译时错误”。如果我不能这样改变,那怎么可能呢? 注意:这只是一个示例,了解为什么我不能像在Java中那样重新分配局部变量。

  • 我有这两个函数,我试图修改元素。其中一个编译,另一个说“val不能重新分配”。以下函数有什么区别?为什么一个编译,另一个不编译? 编译的那个 那个说 无法重新分配Val