2010-05-19 3 views
60

मैं Accelerated GWT (Gupta) - page 151 पढ़ने, जबकि इस कोड को आज भर में आया था (क्या जावा एक .new ऑपरेटर है?)।"object.new" कैसे काम करता है?

public static void getListOfBooks(String category, BookStore bookStore) { 
    serviceInstance.getBooks(category, bookStore.new BookListUpdaterCallback()); 
} 
public static void storeOrder(List books, String userName, BookStore bookStore) { 
    serviceInstance.storeOrder(books, userName, bookStore.new StoreOrderCallback()); 
} 

वे नए ऑपरेटर क्या कर रहे हैं? मैंने कभी ऐसा वाक्यविन्यास नहीं देखा है, क्या कोई समझा सकता है?

किसी को भी पता है जहां जावा कल्पना में इस खोजने के लिए?

+12

+1 जावा वाक्य रचना के लिए मैंने पहले या तो कभी नहीं देखा। –

+1

मैं इनर क्लासों बारे में पता था, लेकिन मैं उन्हें के रूप में बनाने के लिए उपयोग: 'नई outer.SomeClass()' – OscarRyz

+0

ऑस्कर कि वाक्य रचना एक नए स्थिर भीतरी वर्ग –

उत्तर

59

वे भीतरी (नेस्टेड गैर स्थिर) वर्गों रहे हैं क्या Inner में वें के विशिष्ट उदाहरण का संदर्भ है ई बाहरी वर्ग। मुझे आप इस के एक अधिक विस्तृत उदाहरण देता हूँ:

public class Outer { 
    private final String message; 

    Outer(String message) { 
    this.message = message; 
    } 

    public class Inner { 
    private final String message; 

    public Inner(String message) { 
     this.message = message; 
    } 

    public void foo() { 
     System.out.printf("%s %s%n", Outer.this.message, message); 
    } 
    } 
} 

और चलाएँ:

new Outer("Hello").new Inner("World").foo(); 

आउटपुट:

Hello World 

नोट: नेस्टेड कक्षाएं static भी हो सकता है। यदि हां, तो वे बाहरी वर्ग के लिए कोई अंतर्निहित this संदर्भ:

public class Outer { 
    public static class Nested { 
    public void foo() { System.out.println("Foo"); } 
    } 
} 

new Outer.Nested.foo(); 

प्रायः, स्थिर नेस्टेड कक्षाएं private हैं के रूप में वे कार्यान्वयन विवरण और प्रदूषण फैलाने के बिना एक समस्या का एक हिस्सा encapsulating की एक साफ रास्ता हो जाते हैं सार्वजनिक नामस्थान।

+0

आह मैं देखता हूं - धन्यवाद! –

+1

सब कुछ यहीं से बताया है कि अगर किसी को भी इस पर धुंधला है: http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html –

+0

और यह भी एक अच्छा यहाँ चर्चा: http://stackoverflow.com/प्रश्न/70324/जावा-आंतरिक-वर्ग-और-स्थैतिक-नेस्टेड-श्रेणी –

2

मैंने पहले या तो इस वाक्य रचना नहीं देखा है, लेकिन मुझे लगता है यह BookStore की एक आंतरिक वर्ग पैदा करेगा।

public class Outer { 
    public class Inner { public void foo() { ... } } 
} 

आप कर सकते हैं::

Outer outer = new Outer(); 
outer.new Inner().foo(); 

या बस:

new Outer().new Inner().foo(); 

इस का कारण यह