में अंतिम चर मैं अभी भी बहुत स्काला के लिए नया हूँ, लेकिन मुझे पता है तुम जावास्काला निर्माता
में निम्नलिखित वर्ग चर की तरहclass AClass(aVal: String)
निर्माता में प्रारंभ कर रहे हैं जो कर रही है जैसा होगा परिभाषित कर सकते हैं
class AClass {
private String aVal;
public AClass(String aVal) {
this.aVal = 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);
}
मिला: यहाँ जब मैं निम्नलिखित स्काला वर्ग संकलन मैं क्या देख रहा हूँ है 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);
}
से निम्न आउटपुट मिलता है 210
सार्वजनिक विधि aVal
उत्पन्न हुआ है। मैं अभी भी यहां सीख रहा हूं - क्या कोई यह समझा सकता है कि यह क्यों उत्पन्न हुआ है?
नोट मैं स्केला 2,9
यूग। मैं पुराने कार्यान्वयन के व्यवहार के साथ अपने निष्कर्षों को पुन: संकलित करना भूल गया था और फिर पुष्टि की थी (http://scala-programming-language.1934581.n4.nabble.com/Val-and-Final-td1993410.html)। आप वास्तव में सही हैं। उप-वर्गों के बारे में मैंने जो समस्या का उल्लेख किया है, वोल्स को ओवरराइड करने में सक्षम है (और यह फाइनल के लिए एक समस्या है) अंतर्निहित क्षेत्र के आधार पर और माता-पिता में जो ओवरराइड किए गए जेनरेटेड कक्षाओं में एक्सेसर्स (जो अंतिम नहीं हैं) के आधार पर घिरा हुआ है। इसे सीधे सेट करने के लिए धन्यवाद। – Chris