2011-05-20 52 views
0

我宣布这样一个类:怎么知道有限制类型参数的一类

public class TestManagerImpl<T extends IParams> implements TestManager<T> { 

    public TestManagerImpl() {} 
    ... 

} 

我想知道,如果它是可以提取其类型从IParams为T当一个对象被instancied此上课? 当我尝试在getClass()上测试时,它不会给我一个实现ParameterizedType的类型。

我读过,由于类型删除,我不能。 Angelika Langer's Java Generics FAQ。但我不确定它与我的问题有关,不是吗?

谢谢

回答

2

类型擦除是正是这里的问题。你不能在运行时发现什么T是因为编译器没有保存这些信息。唯一能找到的方法是,如果你实际上有一个类型为T的对象被传入你的一个方法中(@Nikita提出了一个这样的机制,但它当然依赖于使用你的类的人的合作)。

4

您可以将Class对象传递给构造函数。但我不知道这是否是好的做法。

+0

这是一个标准的做法。请参阅Bloch的Effective Java中泛型的一章的结尾 – artbristol 2011-05-20 10:32:13

+0

private final Class clazz; public TestManagerImpl(Class clazz) { this.clazz = clazz; } 我想避免它(因为它是春季自动装配的一些bean)。 – RoD 2011-05-20 10:32:45

+0

它不是反模式,并且通常是类知道它自己的泛型类型的唯一方法。 – 2011-05-20 10:33:10

相关问题