retorno metodos metodo manejo instanciar genericos generico genericas generica datos con comparar clases arreglos java generics jsp-tags

metodos - metodo con retorno generico java



Genéricos de Java: obtener clase de tipo de devolución del método genérico (1)

Desafortunadamente, seguramente tendrá que cambiar su método a:

private <T> T evaluate(Class<T> clazz, String expression)

y luego pasar clazz como su segundo parámetro. No tan corto como esperabas

Fondo

Una vez escribí este método:

private <T> SortedSet<T> createSortedSet() { return new TreeSet<T>(); }

Se supone que debe llamarse así:

Set<String> set = createSortedSet();

Esto funciona bien (aunque he visto en las respuestas aquí cuando investigo la pregunta actual que esto es propenso a errores).

La situación actual

De todos modos, ahora estoy escribiendo el siguiente código (en una clase que amplía javax.servlet.jsp.tagext.TagSupport):

private <T> T evaluate(String expression) { ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator(); return evaluator.evaluate(expression, T, null, pageContext.getVariableResolver()); }

El objetivo es poder llamarlo así:

Integer width = evaluate(widthStr);

El código en mi método de evaluación obviamente no funciona. El segundo argumento para evaluator.evaluate() se supone que es un objeto de Clase. Esto me lleva a:

Mi pregunta

¿Cómo puedo obtener la clase de un tipo genérico (retorno)? ¿Qué debería escribir en lugar de T como segundo argumento para evaluar?

EDITAR: Conclusión

Nicolas parece tener razón, no se puede hacer y necesito pasar la clase como argumento para mi método. Lo bueno es que, dado que su solución hace que el argumento se parametrice en el tipo genérico, obtengo una verificación de compilación de ese argumento.