2012-04-29 17 views
5

Sto tentando di creare un'istanza di una classe astratta Java dal mio codice Groovy. Considerando la seguente classe astratta Java (elaborazione non rilevante è spogliato fuori dalla classe):Come istanziare una classe astratta Java con un parametro costruttore con una chiusura groovy

public abstract class StackOverflow{ 
    public abstract String answerMe(); 
} 

posso facilmente un'istanza in Groovy questo modo, e la chiamata a answerMe() attiverà l'uscita corretta:

StackOverflow stack = [answerMe : { "Answer" }] as StackOverflow 

Ora, se io modificare la classe StackOverflow l'aggiunta di un parametro di stringa nel costruttore in questo modo:

public abstract class StackOverflowStr{ 
    public StackOverflowStr(String s){} 
    public abstract String answerMe(); 
} 

io in realtà non kno w come istanziare il mio oggetto, ho provato un sacco di cose, ma non riesco a trovare la sintassi giusta, qualcuno ha qualche idea?

risposta

2

è possibile creare un'istanza in stile classico Java:

StackOverflowStr stack = new StackOverflowStr("javaish"){ 
    String answerMe() {"answer"} 
} 
+0

Grazie ho fatto in questo modo ma mi chiedevo se posso con una chiusura come nel primo esempio. –

+0

@CedricGatay No, se non esiste un costruttore predefinito, non è possibile creare un oggetto proxy senza fare ciò che dice Andrea –

3

Solo per la cronaca, e per essere chiari sul testo: in tutti questi scenari, non stai istanziare una classe astratta.

Le classi astratte sono classi che non possono mai essere istanziate.

Si sta creando un'istanza di una classe anonima concreta che estende una classe astratta. B-)

Problemi correlati