2009-09-23 79 views
1

我有这样一个类:如何访问集合泛型类型类

public class SubClass <T> extends SuperClass<Collection<T>>{ 
    public Class<T> getInner() { 
     // What goes here? 
    } 
} 

如果超类是一个简单的泛型类。我的问题是如何访问一个Class对象以返回它?由于Type擦除,我似乎无法做到这一点。

任何帮助?

+1

如果您可以详细了解您正在尝试执行的具体操作,这将有所帮助,因为您的方法可能有缺陷。 – 2009-09-23 16:46:11

+0

这个虚拟类反映了我的作品中很难描述的一个类。我相信我需要做的事情无法完成,因为我没有参数构造函数的限制。再加上我刚刚注意到我这门课的设计存在缺陷。我想要超类的所有子类都不能是通用的,这是。我将用它作为特例。问题'解决' – 2009-09-23 16:56:10

回答

4

准确地说,类型擦除意味着您必须明确地执行此操作。

基本上你需要​​在构造函数中使用Class<T>作为参数,然后挂在它上面。尽管如此,如果T实际上应该是(比如说)List<String>,您仍然可以在那里找到类型擦除问题。有关此方法的更多信息,请参阅Neal Gafter's blog,解决方法请参见Guice 2.0 TypeLiteral class

+0

嗯,我害怕这将是唯一的选择......我需要这个类没有参数的构造因为它是超类的许多子类之一,创建使用反射与无参数调用newInstanse方法。所以我可以用来绕过这个限制绝对没有任何窍门?任何丑陋的黑客都会帮助:) – 2009-09-23 16:43:46

+0

不。这些信息在执行时不存在。 – 2009-09-23 16:45:19

+0

更新为您的答案:我只会将非泛型类传递给集合,这样添加的类型擦除问题不会弹出。 – 2009-09-23 16:46:20