有没有办法在Java中找到模板(通用)参数的类型?

时间:2009-08-30 13:44:09

标签: java generics

我正在尝试用Java做这样的事情:

public static <T> T foo() {
  return (T) bar(T);
}

public static Object bar(Class<?> klaz) {
  return klaz.newInstance();
}

但代码无法编译,因为我无法用 T 替换 Class&lt;?&gt;
有了具体的课程,我可以打电话给 bar ,如:

bar(ConcreteClass.class);

但同样对 T 不起作用。即没有 T.class

这样的东西

在C#中, typeof 适用于具体和模板类型。因此,对bar的调用将是:

bar(typeof(T));

但是我无法在Java中找到类似的东西。

我是否遗漏了某些内容,或者Java无法获取模板参数的类型?如果Java没有设施,是否有任何解决方法?

1 个答案:

答案 0 :(得分:14)

没有办法获得这种类型。 Java的泛型使用类型擦除,所以即使java本身也不知道T在运行时是什么。

至于变通办法:你可以定义foo来获取Class<T>类型的参数,然后使用它。