斯卡拉最終變量我還是很新的斯卡拉,但我知道你可以定義在Java在構造
以下是在構造像class AClass(aVal: String)
初始化類變量這將是像做
class AClass {
private String aVal;
public AClass(String aVal) {
this.aVal = aVal;
}
}
在Java中,我會聲明aval作爲final。有沒有辦法讓Scala語法中的aVal變量最終成爲可能?
編輯:這是當我編譯下面的斯卡拉類我所看到的:
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
Ug。我一定忘了重新編譯,然後用舊版本的行爲來證實我的發現(http://scala-programming-language.1934581.n4.nabble.com/Val-and-Final-td1993410.html)。你確實是對的。我提到的有關子類能夠覆蓋vals的問題(這是一個問題)是由於隱藏的字段是私有的,並且生成的類中的訪問器覆蓋父類中的訪問器(這不是最終的)。感謝您設置它。 – Chris