Cómo probar si el tipo de retorno de método coincide con la lista <String>

¿Cuál es la forma más fácil de probar (mediante reflexión), si el método dado (es decir, la instancia de Java.lang.Method) tiene un tipo de retorno, que se puede convertir de forma segura en la Lista <String>?

Considera este fragmento:

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 cumplen el requisito. Es bastante fácil probarlo para el método 1 (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 todo getGenericSuperclass () y getGenericInterfaces (), podemos acercarnos bastante, pero no veo cómo hacer coincidir el TypeVariable en la Lista <E> (que ocurre en algún lugar de las interfaces de superclase) con el real escriba el parámetro (es decir, cuando esta E coincide con la cadena).

¿O tal vez hay una forma completamente diferente (más fácil), que pase por alto?

EDITAR: Para aquellos que lo buscan, aquí está el método 4, que también cumple con el requisito y que muestra algunos casos más, que deben investigarse:

public interface Parametrized<T extends StringList> {
    T method4();
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta