Интересно, может ли кто-нибудь указать на библиотеку, которая разрешит это для меня ...
Учитывая объявление типа класса A
Я хотел бы определить фактические типы, назначенные переменным типа класса или интерфейса B
, которые A
либо расширяют, либо реализуют.
Например ...
interface Collection<T> { /*...*/ }
interface List<T> extends Collection<T> { /* ... */ }
class ArrayList<T> implements List<T> { /* ... */ }
class Blah {
// ...
public ArrayList<String> list;
// ...
}
// ...
Class[] result = resolveSuperTypeTypeVariable(Blah.class.getField("list"),
Collection.class);
// result == { String.class } since list would be Collection<String>.
Это, пожалуй, самый простой сценарий ... если переменная типа ArrayList
является подстановочным знаком, меня интересует наиболее ограничивающая верхняя граница ... Если это переменная типа Blah (таким образом, Blah<T>
и ArrayList<T>
) тогда это будет верхняя граница T
и так далее.
Я начал изучать использование иерархии java.lang.reflect.Type, но, похоже, было бы много работы и, возможно, решение уже вышло.