Intellij Идея, не распознающая изменяемое поле в классе Scala, выдает ошибку 'Reassignment to val' - PullRequest
0 голосов
/ 16 мая 2018

У меня есть класс Scala с некоторыми полями var, пусть он будет называться 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. Только для полей, которые находятся непосредственно в классе А.

Кроме того, когда я запускаю 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

1 Ответ

0 голосов
/ 16 мая 2018

Я пробовал это в 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)
}
...