So testen Sie, ob der Methodenrückgabetyp mit List <String> übereinstimmt

Was ist der einfachste Weg zu testen (mittels Reflektion), ob eine gegebene Methode (d. H. Java.lang.Method-Instanz) einen Rückgabetyp hat, der sicher in List <String> umgewandelt werden kann?

Betrachten Sie dieses Snippet:

public static class StringList extends ArrayList<String> {}

public List<String> method1();
public ArrayList<String> method2();
public StringList method3();

Alle Methoden 1, 2, 3 erfüllen die Anforderung. Es ist ziemlich einfach, es für die Methode 1 zu testen (über getGenericReturnType (), die eine Instanz von ParameterizedType zurückgibt), aber für die Methoden 2 und 3 ist es nicht so offensichtlich. Ich stelle mir vor, dass wir durch Durchlaufen aller getGenericSuperclass () und getGenericInterfaces () ziemlich nahe kommen können, aber ich verstehe nicht, wie die TypeVariable in Liste <E> (die irgendwo in den Superklasse-Interfaces vorkommt) mit der tatsächlichen übereinstimmt Typ Parameter (dh wo dieses E zu String passt).

Oder gibt es vielleicht einen ganz anderen (einfacheren) Weg, den ich übersehen habe?

BEARBEITEN: Für diejenigen, die sich damit befassen, ist hier Methode 4, die ebenfalls die Anforderung erfüllt und einige weitere Fälle aufzeigt, die untersucht werden müssen:

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage