[英]Get parameterized type class of a generic variable
public class Foo {
public <T> void foo(final T t) {
final Class<T> clazz = (Class<T>) t.getClass();
}
}
我不明白为什么t.getClass()
返回Class<?>
而不返回Class<T>
(或Class<? extends T>
),所以为什么需要进行强制转换。
这种转换会以哪种方式失败?
Java中的泛型使用类型擦除来实现。
类型T在运行时不存在,并且编译java.lang.Object
替换T
因此,以下方法实际上是用字节码编译的:
public void foo(final Object t)
您应该查找“类型擦除”一词。 Java做泛型的方法是编译“泛型”代码。 也就是说,它会编译将适用于任何类型的代码,并在编译时进行类型检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.