我想在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>
然后使用它.