2015-01-16 7 views
11

Se ho una classe con una classe interna come questo:Come faccio a costruire una (non statico) Java classe interna da Groovy

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

Da Java (nella stessa confezione) posso fare questo:

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

Ma in Groovy, questo non funziona. Quindi, come faccio a costruire una nuova B [da una classe groovy nello stesso pacchetto]?

+0

Ho sempre pensato che, mentre la creazione di un'istanza di A, si sta creando un'istanza di B automaticamente – JClassic

+0

@JClassic no, un'istanza di un volontà non creare un'istanza di B automaticamente – darrenmc

risposta

10

ho preso a lavorare in questo modo:

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

E anche in questo modo:

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

Se il codice Java è sotto il vostro controllo, piuttosto che essendo una libreria esterna, preferirei di gran lunga usare un metodo di fabbrica, comunque.

+0

Grazie, funziona perfettamente. –

3

provare questo

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

I groove 1,7 note di rilascio riguardano perché questa sintassi è il caso in cui sono stati aggiunti il ​​supporto per le classi interne: http://docs.codehaus.org/display/GROOVY/Groovy+1.7+release+notes – darrenmc

+0

Non ho potuto farlo funzionare senza la qualifica 'B' -' new AB (a, "test") '(utilizzando Groovy 2.3.9) –

+0

Questo non funziona. Ottengo "Groovyc: impossibile risolvere la classe B" –

Problemi correlati