我正在尝试用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没有设施,是否有任何解决方法?
答案 0 :(得分:14)
没有办法获得这种类型。 Java的泛型使用类型擦除,所以即使java本身也不知道T在运行时是什么。
至于变通办法:你可以定义foo来获取Class<T>
类型的参数,然后使用它。