2014-09-27 5 views
32

मैं सिर्फ देखा है कि यह स्काला में final के रूप में वस्तुओं की घोषणा करने के लिए संभव है:ऑब्जेक्ट को "अंतिम" घोषित करने का क्या मतलब है?

final object O 

कि ऐसा करने का फ़ायदा क्या है? कोई भी ऑब्जेक्ट्स से वारिस नहीं कर सकता है:

object A 
object B extends A // not found: type A 

उत्तर

30

नहीं है, लेकिन:

$ scala -Yoverride-objects 
Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_11). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> trait A { object O } ; trait B extends A { override object O } 
defined trait A 
defined trait B 

scala> trait A { final object O } ; trait B extends A { override object O } 
<console>:8: error: overriding object O in trait A; 
object O cannot override final member 
     trait A { final object O } ; trait B extends A { override object O } 
                     ^

संभवत: कभी कभी लोगों को यह करना चाहते हैं। (For instance.)

+0

यह बिल्कुल सही है। हालांकि, मुझे इसके बारे में मनाने के लिए कुछ समय लगा। थोड़ी अधिक वर्बोज़, दर्दनाक विस्तार के लिए, [इस डुप्लिकेट प्रश्न] में अपडेट देखें (http://stackoverflow.com/questions/30265070/whats-the-point-of-nonfinal-singleton-objects-in-scala)। यह भी देखें [यह प्रश्न] (http://stackoverflow.com/questions/17308141/what-are-the-subtle-differences-between-val-and-singleton-objects) –

20

इससे कोई फर्क नहीं पड़ता; ऑब्जेक्ट परिभाषा हमेशा अंतिम होती है। language specification स्पष्ट 5.4 संशोधक में यह उल्लेख है:

final वस्तु परिभाषा के लिए अनावश्यक है। किसी को भी इस करता है कि

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