Обнаружение создания общего параметра с помощью Java Reflection - PullRequest
2 голосов
/ 30 января 2012

Рассмотрим следующий сценарий:

class A<T> {}
class B extends A<Integer> {}

Как узнать через отражение в Java, что в B переменная типа T была создана как Integer?

1 Ответ

6 голосов
/ 30 января 2012

Вы можете использовать

Type type = B.class.getGenericSuperclass();

// TODO: check with instanceof first?
ParameterizedType parameterized = (ParameterizedType) type;

// TODO: Check that there *are* type arguments
Type firstTypeArgument = parameterized.getActualTypeArguments()[0];

Короткий, но полный пример:

import java.lang.reflect.*;

class A<T> {}
class B extends A<Integer> {}

public class Test {
    public static void main(String[] args) {
        Type type = B.class.getGenericSuperclass();
        ParameterizedType parameterized = (ParameterizedType) type;
        // Prints class java.lang.Integer
        System.out.println(parameterized.getActualTypeArguments()[0]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...