2017-07-27 7 views
5

मैं रैपिंग कक्षा के बाहर से एक आंतरिक गैर स्थैतिक इंटरफ़ेस को तुरंत चालू करना चाहता हूं।आंतरिक गैर स्थैतिक इंटरफ़ेस कार्यान्वित करें

क्या यह संभव है?

पर विचार करें निम्नलिखित कोड:

shared class AOuterClass() { 
Integer val = 3; 
shared interface AInterface { 
     shared Integer val => outer.val; 
    } 
} 

void test() { 
    AOuterClass o = AOuterClass(); 
    object impl satisfies ???.AInterface{} 
} 

मुझे लगता है कि object impl satisfies o.AInterface{} मेरी उचित अंतर्ज्ञान होगा, लेकिन संकलक यह अनुमति नहीं है।

उत्तर

6

आपके जैसे किसी मामले में यह संभव नहीं है।

सीलोन विनिर्देश कहते हैं (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 वस्तु के लिए काम नहीं करता है तो बस एक नव निर्मित एक के लिए। यह देखते हुए कि यह किसी ऑब्जेक्ट के निजी मान तक पहुंचने की अनुमति देता है, यह एक अच्छी बात प्रतीत होती है।

+0

मैं सहमत हूं, यह सबसे आसान समाधान है। (और हाँ, यह काम करता है।) –

+0

विचार किसी दिए गए'o' के लिए इंटरफ़ेस को बनाने और कार्यान्वित करना था। (लेकिन यह भी एक विचार था और यह महत्वपूर्ण नहीं है, मुझे बस आश्चर्य हुआ कि क्या मुझे कुछ वाक्यविन्यास चाल है) –

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