Доступ к параметрам типа с помощью отражения - PullRequest
1 голос
/ 30 декабря 2010

Как найти значения параметров типа, передаваемые в суперкласс с помощью отражения?

Например, если задано Bar.class, как мне найти, что оно передает Integer.class параметру типа FooT?

public class Foo<T> {
}

public class Bar extends Foo<Integer> {
}

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010
public class Bar extends Foo<Integer> {

 public Class getTypeClass {
   ParameterizedType parameterizedType =
     (ParameterizedType) getClass().getGenericSuperClass();
  return (Class) parameterizedtype.getActualTypeArguments()[0];
 }

}

Вышеуказанное должно работать в большинстве практических ситуаций, , но не гарантировано , из-за стирания типа, нет способа сделать это напрямую.

1 голос
/ 30 декабря 2010

Вы можете попробовать

ParameterizedType type = (ParameterizedType) Bar.class.getGenericSuperclass();
System.out.println(type.getRawType()); // prints; class Foo
Type[] actualTypeArguments = type.getActualTypeArguments();
System.out.println(actualTypeArguments[0]); // prints; class java.lang.Integer

Это работает только потому, что Bar - это класс, который расширяет определенный Foo.Если вы объявите переменную, подобную следующей, вы не сможете определить тип параметра intFoo во время выполнения.

Foo<Integer> intFoo = new Foo<Integer>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...