2015-01-16 9 views
11

bir (statik olmayan) Java iç sınıfı oluşturmak nasıl: Java itibarenBöyle bir iç sınıflarıyla bir sınıf varsa ben Groovy

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

(aynı pakette) Bunu yapabilirim:

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

Ancak Groovy'de bu işe yaramıyor. Öyleyse nasıl yeni bir B'yi (aynı pakette bir groovy sınıfından) yapıyorum?

+0

Her zaman bir A örneği oluştururken, otomatik olarak bir örnek oluşturuyorsunuz diye düşündüm Otomatik olarak – JClassic

+0

@JClassic no, anında A, B örneğinin otomatik olarak oluşturulmayacağını bildiriyor – darrenmc

cevap

10

Böyle çalışmak için aldım:

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

Java kodu yerine, kontrol altında ise: Böyle

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

Ve ayrıca harici bir kütüphane olmakla birlikte, bir fabrika yöntemini kullanmayı tercih ediyorum.

+0

Teşekkürler, mükemmel çalışıyor. –

3

deneyin bu

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

Bu sürüm, bu sözdiziminin niçin kapandığını anlatıyor iç sınıflar için destek eklendiğinde durum: http://docs.codehaus.org/display/GROOVY/Groovy+1.7+release+notes – darrenmc

+0

"B" - "yeni AB" kalifikasyonu olmadan işe alamadım a, "test") '(Groovy 2.3.9 kullanarak) –

+0

Bu işe yaramıyor. "Groovyc: B sınıfını çözemedim" mesajı aldım –