首页 > 解决方案 > Intellij Idea 无法识别 Scala 类中的可变字段,给出“重新分配给 val”错误

问题描述

我有一个带有一些 var 字段的 Scala 类,我们称之为 A:

class A extends AParent {
    var x: String = _
    ...
}

其中 AParent 也有一些字段:

abstract class AParent {
    var id: Long = _
    ...
}

当我尝试使用 A 类在字段 x 上设置值时,Reassignment to val出现错误。为什么当 x 是 var 时会发生这种情况?!也许重要的信息是 A 类及其父级位于单独的项目中,通过 SBT 导入。

有趣的是,对于 AParent 类的任何字段,我都没有得到相同的“错误”。仅适用于直接属于 A 类的字段。

此外,当我从命令行运行时sbt clean compile,一切正常,没有编译错误。此外,当我回到 Idea 并运行应用程序时,它运行良好,没有任何错误或警告。

老实说,这对我来说就像是想法错误,但到目前为止我还没有遇到过类似的经历。

想法版本:

IntelliJ IDEA 2018.1.3 (Ultimate Edition)
Build #IU-181.4892.42, built on May 8, 2018
...
JRE: 1.8.0_152-release-1136-b38 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.4

标签: scalaintellij-ideacompiler-errorscompilationsbt

解决方案


我在 Intellij 中尝试过。我需要做的唯一更改是对vars 进行默认初始化,例如:

class A extends AParent {
  var x: String = _
  def setId(newId: Long) {
    id = newId
  }
}

abstract class AParent {
  var id: Long = _
}

object Appl extends App {
  val a = new A()
  a.setId(234)
  println(a.id)
}

推荐阅读