Какой самый простой способ проверить (используя отражение), имеет ли данный метод (например, экземпляр java.lang.Method) тип возврата, который можно безопасно привести к списку ?
Рассмотрим этот фрагмент:
public static class StringList extends ArrayList<String> {}
public List<String> method1();
public ArrayList<String> method2();
public StringList method3();
Все методы 1, 2, 3 соответствуют требованию. Это довольно легко проверить для метода method1 (через getGenericReturnType (), который возвращает экземпляр ParameterizedType), но для методов 2 и 3 это не так очевидно. Я полагаю, что, обойдя все getGenericSuperclass () и getGenericInterfaces (), мы можем довольно близко, но я не вижу, как сопоставить TypeVariable в List (который происходит где-то в интерфейсах суперкласса) с фактическим параметр типа (т. е. где это E соответствует String).
Или, может быть, есть совершенно другой (более простой) способ, который я упускаю из виду?
РЕДАКТИРОВАТЬ: Для тех, кто изучает это, здесь метод4, который также выполняет требование и который показывает еще несколько случаев, которые должны быть исследованы:
public interface Parametrized<T extends StringList> {
T method4();
}