2010-12-14 56 views
1

如果这是重复的道歉。以编程方式确定泛型类型

有什么办法可以确定一个类是什么泛型?

即我想知道什么是T ....

public void doSomething(SomeClass<T> thing) 
{ 
    Class<T> t = ???; 
} 

感谢页。

+1

在运行时?没有 - >查找类删除,在编译时更具体 – stacker 2010-12-14 22:22:27

回答

3

不在Java中。您也必须接受Class<T>的参数,调用者必须提供该参数。 (如果需要,可以在构造函数中执行此操作,以便类引用可用于所有类方法。)这是一个常用的入侵行为,用于确定运行时引用的内容,否则由于方式Java实现泛型。

0

可以这样做,只要T参数化为类定义。例如:

interface IContainer<T> { 
    public void doSomething(SomeClass<T> thing) { 
    Class<?> t = TypeResolver.resolveArgument(getClass(), IContainer.class); 
    } 
} 

class ConatinerImpl implements IContainer<String> {} 

有关使用TypeResolver的更多信息,请参阅TypeTools