¿Cuál es la forma más fácil de probar (utilizando reflexión), si el método dado (ejemplo java.lang.Method) tiene un tipo de retorno, que se puede convertir a List <Cadena>?Cómo comprobar si el tipo de retorno de método coincide con List <String>
Considere la siguiente:
public static class StringList extends ArrayList<String> {}
public List<String> method1();
public ArrayList<String> method2();
public StringList method3();
Todos los métodos 1, 2, 3 cumplir con el requisito. Es bastante fácil probarlo para el método1 (a través de getGenericReturnType(), que devuelve la instancia de ParameterizedType), pero para los métodos 2 y 3, no es tan obvio. Me imagino que al atravesar getGenericSuperclass() y getGenericInterfaces(), podemos acercarnos bastante, pero no veo, cómo hacer coincidir el TypeVariable en List <E> (que se encuentra en alguna parte de las interfaces de la superclase) con el real tipo de parámetro (es decir, donde esta E se corresponde con la cadena).
¿O tal vez hay una forma completamente diferente (más fácil) de pasar por alto?
EDIT: Para aquellos que buscan en ella, aquí es método 4, que también cumple con el requisito y que muestra algunos casos más, que tienen que ser investigados:
public interface Parametrized<T extends StringList> {
T method4();
}
Guau, me sorprende que esto sea tan complicado. ¡Acabo de probar y aprendí que (obj instanceof List) no se compila! wtf? –
Kip