Ale*_*rev 21 java generics type-erasure
有没有办法从Java泛型类中的类型变量中获取Class对象?像这样的东西:
public class Bar extends Foo<T> {
public Class getParameterClass() {
return T.class; // doesn't compile
}
}
Run Code Online (Sandbox Code Playgroud)
此类型信息在编译时可用,因此不应受类型擦除的影响,因此,理论上应该有一种方法可以实现此目的.它存在吗?
sfu*_*ger 25
这有效:
public static class Bar extends Foo<String> {
public Class<?> getParameterClass() {
return (Class<?>) (((ParameterizedType)Bar.class.getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
代码片段有点令人困惑.T是类型参数还是类?
public static class Bar extends Foo<String> {
public Class<?> getParameterClass() {
return (Class<?>) (((ParameterizedType)Bar.class.getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
public static class Bar2<T> extends Foo<T> {
public Class<?> getParameterClass() {
return (Class<?>) (((ParameterizedType)Bar2.class.getGenericSuperclass()).getActualTypeArguments()[0]);
}
}
public static void main(String[] args) {
System.out.println(new Bar().getParameterClass());
System.out.println(new Bar2<Object>().getParameterClass());
}
Run Code Online (Sandbox Code Playgroud)
实际上第二个println会导致异常.
| 归档时间: |
|
| 查看次数: |
24821 次 |
| 最近记录: |