2012-02-20 10 views
7

¿Alguien sabe que para generar la siguiente declaración de método genérico utilizando CodeModel:Sun CodeModel método genérico

public <T> T getValue(Class<T> clazz){...} 

uso:

ValueType value = getValue(ValueType.class); 

no parece ser manejado por el implmentation existente.

Sé que podría manejar el código de la siguiente manera, pero requiere un reparto:

public Object getValue(Class class){...} 

uso:

ValueType value = (ValueType)getValue(ValueType.class); 

Obviamente, esto es un poco complicado debido a la fundición.

+0

Interesante, acabo de encontrar un informe de error que menciona este problema: http://java.net/jira/browse/CODEMODEL-4. Además, esto fue comentado recientemente. –

Respuesta

11

Cree el método con un tipo de devolución Object, genere el método, luego sobrescriba el tipo de devolución.

final JDefinedClass exampleClass = codeModel._class("com.example.ExampleClass"); 
final JMethod method = exampleClass.method(JMod.PUBLIC, Object.class, "getValue"); 
final JTypeVar t = method.generify("T"); 
method.type(t); 
method.param(codeModel.ref(Class.class).narrow(t), "type"); 
method.body()._return(JExpr._null()); 
+0

Esto funciona como un encanto. Muchas gracias por ponerme en el camino correcto. Me he tomado la libertad de actualizar el problema de jira referenciado. –

Cuestiones relacionadas