获取泛型class的通用方法
1
| Type type = ((ParameterizedType)obj.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
|
因为有泛型擦除, 并不是所有情况下都能获取到泛型实际类型. 只有在泛型类型明确时, 才能在运行时获取到泛型类型
无法获取到泛型类型
1 2 3 4 5 6 7 8 9 10 11
| class SuperClass<T>{
} SuperClass<String> object = SuperClass<String>()
SubClass<T> extends SuperClass<T>{
} SubClass<String> object = SubClass<Strng>()
|
可以获取到泛型类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| SubClass extends SuperClass<String>{
}
abstract class SuperClass<T>{
} SuperClass<String> object = new SuperClass<String>(){ ... }
|
上面集中场景是可以获取到泛型的类型的,至于为什么可以,我觉得是因为在上面的场景中获取泛型类型时,泛型的具体类型已经是确定的了。 1和2是在编译时就能确定的,3\4\5是在运行时确定的