2012-04-29 13 views
5

Estoy intentando crear una instancia de una clase abstracta de Java a partir de mi código de Groovy. Teniendo en cuenta la siguiente clase abstracta de Java (procesamiento no relevante se despojó de la clase):Cómo crear una instancia de una clase abstracta de Java con un parámetro de constructor con un cierre maravilloso

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

puedo crear una instancia fácilmente en Groovy esta manera, y la llamada a answerMe() activará la salida correcta:

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

Ahora bien, si modifico la clase StackOverflow añadiendo un parámetro de cadena en el constructor de esta manera:

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

realmente no lo conoci w cómo crear una instancia de mi objeto, probé muchas cosas, pero parece que no puedo encontrar la sintaxis correcta, ¿alguien tiene alguna pista?

Respuesta

2

Puede instanciarlo en estilo clásico de Java:

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

Gracias lo hice de esta manera, pero me preguntaba si puedo hacerlo con un cierre como en el primer ejemplo. –

+0

@CedricGatay No, si no hay un constructor predeterminado, no puede crear un objeto proxy sin hacer lo que dice Andrea –

3

Sólo para que conste, y ser claro en la redacción: en todos estos escenarios, no estas instancias de una clase abstracta.

Las clases abstractas son clases que nunca se pueden crear instancias.

Estás instanciando una clase concreta anónima que amplía una clase abstracta. B-)

Cuestiones relacionadas