Scala final variables in constructor

Я еще совсем новичок в 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

5
задан Jeff Storey 2 October 2011 в 14:28
поделиться