2015-01-16 8 views
11

से एक (गैर स्थिर) जावा भीतरी वर्ग का निर्माण करते हैं:मैं कैसे अगर मैं इस तरह एक आंतरिक वर्ग के साथ एक वर्ग है ग्रूवी

public class A { 
    class B { //note, no modifier on class or constructor 
     B(String c) {System.out.println(c);} 
    } 
} 

जावा से (एक ही पैकेज में) मैं यह कर सकता:

public class C { 
    public static void main(String[] args) { 
     A a = new A(); 
     System.out.println(a. new B("test")); //crazy syntax! 
    } 
} 

लेकिन ग्रोवी में, यह काम नहीं करता है। तो मैं एक नया बी कैसे बना सकता हूं [उसी पैकेज में ग्रोवी क्लास से]?

+0

मैंने हमेशा सोचा है कि ए का उदाहरण बनाते समय, आप स्वचालित रूप से – JClassic

+0

@JClassic no का उदाहरण बना रहे हैं, तत्काल ए बी स्वचालित रूप से 0 का उदाहरण नहीं बनायेगा – darrenmc

उत्तर

10

मैं इसे इस तरह काम करने के लिए मिल गया:

def a = new A() 
A.B.newInstance(a, "foo") 

और यह भी इस तरह:

def a = new A() 
new A.B(a, "foo") 

जावा कोड के बजाय आपके नियंत्रण में है एक बाहरी पुस्तकालय होने के नाते, हालांकि मैं एक फैक्ट्री विधि का उपयोग करना चाहता हूं।

+0

धन्यवाद, पूरी तरह से काम करता है। –

3

कोशिश इस

A a = new A(); 
    System.out.println(new B(a, "test")); //crazy syntax! 
+1

ग्रोवी 1.7 रिलीज नोट्स कवर यह वाक्यविन्यास क्यों है मामला जब आंतरिक कक्षाओं के लिए समर्थन जोड़ा गया था: http://docs.codehaus.org/display/GROOVY/Groovy+1.7+release+notes – darrenmc

+0

मैं इसे 'बी' - 'नई एबी' के योग्यता के बिना काम नहीं कर सका (ए, "परीक्षण") '(ग्रोवी 2.3.9 का उपयोग करके) –

+0

यह काम नहीं करता है। मुझे "ग्रोवियक: क्लास बी को हल करने में असमर्थ" –

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