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

Cod*_*ler 11 java generics

我想在Java中做这样的事情:

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

public static Object bar(Class<?> klaz) {
  return klaz.newInstance();
}
Run Code Online (Sandbox Code Playgroud)

但是代码没有编译,因为我不能用T代替Class <?>.
有了一个具体的类,我可以打电话,如:

bar(ConcreteClass.class);
Run Code Online (Sandbox Code Playgroud)

但同样对T不起作用.即没有T.class这样的东西

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

bar(typeof(T));
Run Code Online (Sandbox Code Playgroud)

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

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

sep*_*p2k 15

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

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