2010-12-30 2 views
1

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

Например, если Bar.class, как я считаю, что она проходит Integer.class к Foo «s параметр типа T?

public class Foo<T> { 
} 

public class Bar extends Foo<Integer> { 
} 

Спасибо!

ответ

1

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

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 

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

Foo<Integer> intFoo = new Foo<Integer>(); 
2
public class Bar extends Foo<Integer> { 

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

} 

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

+0

Хотя в этом случае вы могли бы getTypeClass() вернуть класс или Integer.class. ;) –

+0

@Peter Да. Я просто пытался показать процесс в общем виде :) –

Смежные вопросы