scala - 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
解决方案
我在 Intellij 中尝试过。我需要做的唯一更改是对var
s 进行默认初始化,例如:
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)
}
推荐阅读
- python - 关键错误熊猫:('production_countries','发生在索引成人')
- pyspark - pyspark:将 StringIndexer 参数“handleInvalid”更改为“skip”后引发 Java 堆空间错误
- perl - 将其存储在hashref中后如何在perl中迭代YAML doc
- firebase - Picasso 无法从 FirebaseStorage 加载图像
- javascript - 反应路由器用字符串替换参数
- google-sheets - 自动比例分配公式
- winforms - Visual Studio PowerShell 加载包含文件的列表框
- python - 您可以在列表理解中嵌套多少个 for 循环是否有限制?
- oracle - 循环进入游标,直到oracle中的每个IF ELSE都为真
- c - int=float%int; 有什么问题?