如何获取泛型参数类型的类实例

3
在代码中,如果我写了这样一行代码:
GClass<Double> x = new GClass<Double>();

假设这个类长这样:

public static class GClass<T> {
  private T value = null;
  public GClass() {
    // What is T? 
  }
}

在我插入问题“什么是T?”的地方,我不想要值(即null),而是它的类型(即Double)。


在什么情况下需要这样做呢?毕竟实例化gClass的客户端应该已经知道它的参数类型了吧? - Robert
1个回答

10

除非您添加一个构造函数参数来获取Class<T>参数并在您的情况下使用Double.class调用它,否则您无法在执行时找到T。然后,您可以存储该类并稍后使用它。

这是由于类型擦除...基本上,泛型只是编译器魔术,用于插入适当的转换并检查事物是否应该正常工作。

请参见Java Generics FAQ中的Type Erasure部分。

您还可以阅读Neal Gafter关于超级类型令牌类型文字的博客文章。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接