2009-09-03 283 views
3

在代码中,如果我写一个代码行是这样的:如何获取泛型参数类型的类实例

GClass<Double> x = new GClass<Double>(); 

而让说,这个类是这样的:

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

在哪里我插入了“什么是T?”这个问题,我不想要这个值(即null),但是它的类型(即Double)。

+0

在什么情况下你需要这样做?无论如何,实例化gClass的客户端肯定会意识到它是参数化类型? – Robert 2009-09-03 09:43:36

回答

10

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

这是由于类型擦除 ...基本上泛型只是编译器法宝插入相应的管型和检查的事情应该好起来的。

查看Type Erasure部分的优秀Java Generics FAQ

您可能也想看到Neal Gafter的博客文章super type tokenstype literals

相关问题