2014-07-23 8 views
22

स्काला में बीच का अंतर,स्काला में, अंतिम वैल और वैल

val a = 1 

और

के बीच अंतर क्या है
final val fa = 1 
+0

हालांकि यह प्रश्न समवर्ती पीओवी से तैयार किया गया है, मुख्य उत्तर वैल और अंतिम मूल्य के बीच अंतर प्रकट करता है। –

+0

ऐसा लगता है कि 'अंतिम वैल' स्थिरता को उस कोड में रेखांकित करने की अनुमति देता है जो इसका उपयोग करता है: http://stackoverflow.com/a/13412894/14955 – Thilo

उत्तर

35

final सदस्यों अधिरोहित जा सकता है, कहते हैं, एक उप-वर्ग या विशेषता में ।

कानूनी:

class A { 
    val a = 1 
} 

class B extends A { 
    override val a = 2 
} 

अवैध:

class A { 
    final val a = 1 
} 

class B extends A { 
    override val a = 2 
} 

आप इस जैसे एक त्रुटि मिल जाएगा:

:9: error: overriding value a in class A of type Int(1);

value a cannot override final member

7

स्काला में, final घोषणा करता है कि एक सदस्य नहीं हो सकता है उपclasses में overridden। उदाहरण के लिए:

class Parent { 
    val a = 1 
    final val b = 2 
} 

class Subclass extends Parent { 
    override val a = 3 // this line will compile 
    override val b = 4 // this line will not compile 
} 

इसके अलावा, जैसा Why are `private val` and `private final val` different? में चर्चा की है, अगर एक final val क्षेत्र एक "निरंतर मूल्य", एक निरंतर आदिम प्रकार, कर रहा है उस तक पहुँच बाईटकोड के साथ सीधे कि मूल्य लोड करने के लिए बदल दिया जाएगा।

+0

सभी 'अंतिम वाल्स' के लिए लगातार फोल्डिंग होता है, न केवल निजी, लंबे समय तक क्योंकि उनके प्रकार अनुमानित है। –

+0

अच्छा बिंदु। संपादित। – wingedsubmariner

2

आप गैर-finalval एस (जावा) एनोटेशन में भी उपयोग नहीं कर सकते हैं।

उदाहरण के लिए

, इस:

@GameRegistry.ObjectHolder(Reference.MOD_ID) 
object ModItems{ 
} 

केवल संकलन होगा अगर MOD_IDfinal के रूप में घोषित किया गया है।

संबंधित मुद्दे