以编程方式确定泛型类型

时间:2010-12-14 22:19:38

标签: java generics

如果这是重复的话,

道歉。

有没有办法确定一个类的泛型类型?

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

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

谢谢,p。

2 个答案:

答案 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