बेनामी वर्ग आलसी प्रोग्रामर के लाभ के लिए है - बातें नामकरण बहुत कठिन है :)
बेनामी वर्ग बहुत ज्यादा एक स्थानीय वर्ग की तरह है। यदि एक स्थानीय वर्ग सिर्फ एक वस्तु बनाने के लिए है, जिसका उपयोग केवल सुपरटेप के रूप में किया जाता है, तो हम इसके बजाय एक अज्ञात वर्ग बना सकते हैं जो अधिक संक्षिप्त है।
बेनामी क्लास undenotable (प्रोग्रामर के लिए) है, जो ठीक है क्योंकि हमें इसे फिर से संदर्भित करने की आवश्यकता नहीं है। हालांकि, कंपाइलर के लिए, कक्षा का नाम बहुत अधिक है, और स्पष्ट रूप से नामित कक्षाओं से अलग तरीके से इसका इलाज करने का कोई कारण नहीं है। अभिव्यक्ति का स्थिर प्रकार ठोस उपclass है, और वस्तु के सदस्य उस वर्ग के सदस्य हैं। क्या यह सुविधा (hello()
पर कॉल करने में सक्षम है) व्यर्थ? केवल तभी यदि आप स्थानीय वर्ग व्यर्थ मानते हैं (और वास्तव में स्थानीय वर्ग का शायद ही कभी उपयोग किया जाता है)। यहां एक example है जहां मैंने उस सुविधा का उपयोग किया (मज़ेदार के लिए)।
हालांकि प्रकार अनावश्यक है, प्रकार एपीआई के माध्यम से स्वयं के रूप में जीवित रह सकता है। उदाहरण के लिए,
Objects.requireNonNull(new Object(){ void hello(){} }).hello();
हालांकि हम प्रकार का नाम नहीं सकते हैं, यह है जहाँ यह निष्कर्ष निकाला जा सकता नामित किए जाने की जरूरत नहीं है।
Collections.singleton(new Object(){ void hello(){} })
.forEach(o->{ o.hello(); o.hello(); });
और हम लोगों के लिए पहेलियों के जो स्थिर प्रकार
Collections.singleton(new Object(){}).add(new Object()); // does not compile! why?
[JLS-15.9.5 उम्मीद नहीं थी बना सकते हैं। बेनामी कक्षा घोषणाएं] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9.5) –
आपको प्रतिबिंब के माध्यम से इसे प्राप्त करने में सक्षम होना चाहिए। लेकिन हाँ, यह लगभग पूरी तरह से व्यर्थ है।यदि आप विधियों को कॉल करना चाहते हैं, तो आप आमतौर पर अपनी अनाम कक्षा में एक इंटरफेस लागू करते हैं। – Thilo
ठीक है, यदि आप एक अधिक विशिष्ट प्रकार (जैसे, * इंटरफ़ेस * का अज्ञात कार्यान्वयन) का अज्ञात वर्ग बनाते हैं, तो आप एक चर में संदर्भ को पकड़ सकते हैं जो आपको इच्छानुसार उन विधियों को कॉल करने देगा। –