我有2个班级:
public class Super {
public static <T> T bar(Class<T> clazz){
try {
return (T)(clazz.newInstance());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return null;
}
}
和
public class Sub extends Super{
public static void main(String[] args){
Sub s = Sub.bar(Sub.class);
}
}
现在我不想将Class<T> clazz
用作bar
的参数,所以如何返回通用类型T
,谢谢。
答案 0 :(得分:2)
你做不到。泛型只是编译时间,并且不可用于运行时。因此,您将 提供Class clazz
以便在运行时了解T。
答案 1 :(得分:1)
提供Class实例来创建新对象没有错。
如果您的代码需要创建对象或通常在某些类上运行,则应传递实例。此操作与其他对象使用没有区别。仿制药应该使事情变得更容易,并确保类型安全。所以在这种情况下,只能通过对通用参数设置一些限制,通过条形静态方法创建女巫类的限制。
顺便说一句。
您应该从实现该类的类中调用静态方法,而不是Sub.bar(Sub.class)
,而应该Super.bar(Sub.class)
。