आपके जैसे किसी मामले में यह संभव नहीं है।
सीलोन विनिर्देश कहते हैं (section 4.5.4 Class Inheritance):
एक नेस्टेड वर्ग का एक उपवर्ग प्रकार है कि नेस्टेड वर्ग या प्रकार है कि नेस्टेड वर्ग वाणी की एक उप-प्रकार की वाणी का सदस्य होना आवश्यक है। एक वर्ग जो नेस्टेड इंटरफ़ेस को संतुष्ट करता है वह उस प्रकार का सदस्य होना चाहिए जो नेस्टेड इंटरफ़ेस या नेस्टेड इंटरफ़ेस घोषित करने वाले प्रकार के उप प्रकार की घोषणा करता है।
तो आप केवल घोषित कक्षा के अंदर एक घोंसला वाले इंटरफ़ेस को संतुष्ट कर सकते हैं, या इसके उप-वर्ग में। एक नए इंटरफ़ेस द्वारा नेस्टेड इंटरफेस को विस्तारित करने के लिए इसी तरह की भाषा है।
यह सीधे object
घोषणाओं का उल्लेख नहीं है, लेकिन जो केवल वर्ग परिभाषा के लिए एक शॉर्टकट हैं, के रूप में थोड़ी देर बाद सविस्तार, Anonymous classes में:
निम्नलिखित घोषणा:
shared my object red extends Color('FF0000') {
string => "Red";
}
वास्तव में है इसके बराबर:
shared final class \Ired of red extends Color {
shared new red extends Color('FF0000') {}
string => "Red";
}
shared my \Ired red => \Ired.red;
\Ired
कंपाइलर द्वारा आवंटित प्रकार का नाम है।
तो इसमें object
घोषणाएं भी शामिल हैं।
आप (मैं यह परीक्षण नहीं किया है) ऐसा करने में सक्षम हो सकता है क्या:
AOuterClass.AInterface test(){
object o extends AOuterClass() {
shared object impl satisfies AInterface{}
}
return o.impl;
}
बेशक
, इस, एक मौजूदा AOuterClass
वस्तु के लिए काम नहीं करता है तो बस एक नव निर्मित एक के लिए। यह देखते हुए कि यह किसी ऑब्जेक्ट के निजी मान तक पहुंचने की अनुमति देता है, यह एक अच्छी बात प्रतीत होती है।
स्रोत
2017-07-27 19:05:42
मैं सहमत हूं, यह सबसे आसान समाधान है। (और हाँ, यह काम करता है।) –
विचार किसी दिए गए'o' के लिए इंटरफ़ेस को बनाने और कार्यान्वित करना था। (लेकिन यह भी एक विचार था और यह महत्वपूर्ण नहीं है, मुझे बस आश्चर्य हुआ कि क्या मुझे कुछ वाक्यविन्यास चाल है) –