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


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

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

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

但是代码没有编译,因为我无法替代 Ť 为一个 类<?>
有了具体的课,我可以打电话 酒吧 喜欢:

bar(ConcreteClass.class);

但这同样不起作用 Ť。即没有这样的事情 T.class 

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

bar(typeof(T));

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

我错过了什么,或者Java没有办法获取模板参数的类型?如果Java没有设施,是否有任何解决方法?


12777
2017-08-30 13:44


起源



答案:


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

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


14
2017-08-30 13:47