Jaki jest najłatwiejszy sposób testowania (za pomocą refleksji), czy dana metoda (np. Instancja java.lang.Method) ma typ zwrotu, który można bezpiecznie odlać na listę < Ciąg >?Jak sprawdzić, czy typ zwracanej metody pasuje do listy <String>
Rozważmy następujący fragment:
public static class StringList extends ArrayList<String> {}
public List<String> method1();
public ArrayList<String> method2();
public StringList method3();
Wszystkie metody 1, 2, 3 spełnić ten wymóg. Jest dość łatwy do przetestowania go dla metody 1 (przez getGenericReturnType(), która zwraca instancję parametru ParameterizedType), ale dla metod2 i 3 nie jest to tak oczywiste. Wyobrażam sobie, że przechodząc przez wszystkie getGenericSuperclass() i getGenericInterfaces(), możemy uzyskać całkiem blisko, ale nie widzę, jak dopasować TypeVariable na liście <E> (która występuje gdzieś w interfejsach nadklasy) z faktycznym parametr typu (tj. gdzie ten E jest dopasowany do łańcucha znaków).
A może jest zupełnie inny (łatwiejszy) sposób, który przeoczyłem?
EDIT: Dla tych, którzy chcą do niego, oto method4, który spełnia także wymagania i co pokazuje jeszcze kilka spraw, które mają zostać zbadane:
public interface Parametrized<T extends StringList> {
T method4();
}
Wow, jestem zaskoczony, że to bardzo skomplikowane. Właśnie przetestowałem i dowiedziałem się, że (obj wystąpienie List) nie kompiluje! wtf? –
Kip