Я все еще довольно новичок в Scala, но я знаю, что вы можете определить переменные класса, которые инициализируются в конструкторе, например
class AClass(aVal: String)
что будет похоже на выполнение следующих действий в Java
class AClass {
private String aVal;
public AClass(String aVal) {
this.aVal = aVal;
}
}
В Java я бы объявил aVal как окончательный. Есть ли способ сделать финальную переменную aVal в синтаксисе Scala?
РЕДАКТИРОВАТЬ: Вот что я вижу, когда я компилирую следующий класс Scala:
class AClass(aVal: String) {
def printVal() {
println(aVal)
}
}
Я запустил javap -private
и получил вывод
public class AClass extends java.lang.Object implements scala.ScalaObject{
private final java.lang.String aVal;
public void printVal();
public AClass(java.lang.String);
}
Когда я изменяю определение класса scala на class AClass(**val** aVal: String)
, я получаю следующий вывод из javap -private
public class AClass extends java.lang.Object implements scala.ScalaObject{
private final java.lang.String aVal;
public java.lang.String aVal();
public void printVal();
public AClass(java.lang.String);
}
Публичный метод aVal
генерируется. Я все еще учусь здесь - кто-нибудь может объяснить, почему это генерируется?
Обратите внимание, я использую scala 2.9