道歉。
有没有办法确定一个类的泛型类型?
即我想知道T
是什么......
public void doSomething(SomeClass<T> thing)
{
Class<T> t = ???;
}
谢谢,p。
答案 0 :(得分:3)
不是Java。您还必须接受Class<T>
的参数,调用者必须提供该参数。 (如果您愿意,可以在构造函数中执行此操作,以便类引用可用于所有类方法。)这是一个常用的hack,用于确定T
在运行时引用的内容,这是不可用的否则由于Java实现泛型的方式。
答案 1 :(得分: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。