在代码中,如果我写这样的代码行:
GClass<Double> x = new GClass<Double>();
让我们说,课程是这样的:
public static class GClass<T> {
private T value = null;
public GClass() {
// What is T?
}
}
我在插入问题“什么是T?”时,我不想要值(即null
),而是它的类型(即Double
)。
答案 0 :(得分:10)
您无法在执行时找到T
,除非您添加构造函数参数以获取Class<T>
参数并在您的情况下通过Double.class
调用它。然后,您可以存储该类并在以后使用它。
这是由于类型擦除 ...基本上泛型只是编译器魔术来插入适当的强制转换,并检查 的内容是否正常。
请参阅优秀Type Erasure的Java Generics FAQ部分。
您可能还想阅读Neal Gafter关于super type tokens和type literals的博客文章。