Я еще совсем новичок в Scala, но я знаю, что вы можете определять переменные класса, которые инициализируются в конструкторе, например
class AClass(aVal: String)
что было бы похоже на следующее в java
class AClass {
private String aVal;
public AClass(String aVal) {
this.aVal = aVal;
}
}
В Java я бы объявил aVal как final. Есть ли способ сделать переменную aVal конечной в синтаксисе Scala?
EDIT: Вот что я вижу, когда компилирую следующий класс 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