2017-03-13 11 views
8

सदस्य इंटरफ़ेस केवल शीर्ष-स्तरीय कक्षा या इंटरफ़ेस या स्थिर संदर्भ में परिभाषित किया जा सकता है।जावा में एक स्थिर संदर्भ में एक सदस्य इंटरफेस को परिभाषित करने के लिए कैसे?

केस एक: एक शीर्ष स्तर वर्ग के भीतर इंटरफ़ेस पूरी तरह से काम करता है

package multiplei.interfaces.test; 

public class InterfaceBetweenClass { 

    interface Foo { 
     void show(); 
    } 

    class InnerClass implements Foo{ 
     public void show(){ 
      System.out.println("Inner Class implements Foo"); 
     } 
    } 

    public static void main(String[] args) { 
     new InterfaceBetweenClass().new InnerClass().show(); 
    } 

} 

प्रकरण बी: एक अंतरफलक के भीतर इंटरफेस अच्छा काम करता है।

public interface Creatable { 
    interface Foo{ 
     void show(); 
    }} 

मामला सी: मैं इसे बेवकूफ लगता है यही कारण है कि किसी को भी एक स्थिर संदर्भ में एक इंटरफेस को परिभाषित करेगा। लेकिन जब मैं स्थैतिक संदर्भ में इंटरफ़ेस को परिभाषित करने का प्रयास करता हूं तो यह मुझे एक ही त्रुटि संदेश देता है।

package multiplei.interfaces.test; 

public class InterfaceBetweenClass { 
    public static void main(String[] args) { 
     interface Foo { //Line 5 
      void show(); 
     } 
    } 

}} 

लेकिन लाइन नंबर 5 मुझे निम्न त्रुटि संदेश "The member interface Foo can only be defined inside a top-level class or interface or in a static context. देता है "कृपया मुझे इस के साथ मदद कर बाहर एक अंतरफलक तो कैसे स्थिर संदर्भ में परिभाषित किया जा सकता है?

+0

भले ही यह संभव हो, यह किसी विधि के भीतर इंटरफ़ेस बनाने का कोई अर्थ नहीं उठाएगा। यह इंटरफ़ेस विधियों के दायरे के बाहर दिखाई नहीं देगा, न कि अज्ञात आंतरिक कक्षाओं में भी बाद में उसी विधि में बनायेगा। –

+0

@ टिमोथी ट्राक्ले मुझे इसके बारे में पता नहीं है। ऐसा लगता है कि "स्थानीय वर्ग" के साथ ही वही स्थिति होती है और उन तरीकों के भीतर अनुमति दी जाती है: http://stackoverflow.com/questions/2428186/use-of-class-definitions-inside-a-method-in-java? noredirect = 1 और lq = 1 – Thilo

+1

@ थिलो * 'ऐसा लगता है कि "स्थानीय वर्ग" * बिल्कुल नहीं है। आप उसी विधि (और कहीं और नहीं) के तत्काल उपयोग के लिए स्थानीय कक्षा बनाते हैं, जबकि आप इसे लागू करने वाले कुछ ठोस वर्ग के बजाय * किसी अन्य स्थान * पर उपयोग के लिए इंटरफेस बनाते हैं। –

उत्तर

4

आप तरीकों के भीतर इंटरफेस को परिभाषित नहीं कर सकते हैं।

मैं परिदृश्य त्रुटि संदेश के एक आंतरिक वर्ग के भीतर एक इंटरफेस को परिभाषित किया गया है बात कर रहा है लगता है (जो किया जा सकता है, लेकिन केवल तभी, एक static भीतरी वर्ग है):

class A{ 
    static class X{ 
    interface Y{} 
    } 
} 
+0

स्टेटिक नेस्टेड क्लासेस शीर्ष स्तर की कक्षाओं की तरह हैं, इसलिए केस ए में अनुमान लगाया जाना चाहिए :( –

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