在代码中,如果我写这样的代码行:
GClass<Double> x = new GClass<Double>();
Run Code Online (Sandbox Code Playgroud)
让我们说,这个课程是这样的:
public static class GClass<T> {
private T value = null;
public GClass() {
// What is T?
}
}
Run Code Online (Sandbox Code Playgroud)
在我插入问题"什么是T?"的地方,我不想要值(即null),而是它的类型(即Double).
Jon*_*eet 10
T除非你添加一个构造函数参数来获取Class<T>参数并Double.class在你的情况下调用它,否则你无法在执行时找到它.然后,您可以存储该类并在以后使用它.
这是由于类型擦除 ...基本上泛型只是编译器魔术插入适当的强制转换并检查事情应该没问题.
请参阅优秀的Java Generics FAQ的Type Erasure部分.
您可能还想阅读Neal Gafter关于超类型令牌和类型文字的博客文章.