Узнайте фактическое значение для переменной типа для общего родительского класса - PullRequest
0 голосов
/ 14 марта 2019

Интересно, может ли кто-нибудь указать на библиотеку, которая разрешит это для меня ...

Учитывая объявление типа класса 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, но, похоже, было бы много работы и, возможно, решение уже вышло.

...