Java实例化泛型类型
示例
由于类型擦除,以下内容将不起作用:
public <T> void genericMethod() {T t = new T(); // 无法实例化类型T。
}
类型T被删除。由于JVM在运行时不知道T原来是什么,因此它不知道要调用哪个构造函数。
解决方法
T调用时传递的类genericMethod:
public <T> void genericMethod(Class<T> cls) {
try {
T t = cls.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
System.err.println("无法实例化: " + cls.getName());
}
}genericMethod(String.class);
这将引发异常,因为无法知道所传递的类是否具有可访问的默认构造函数。
传递对T的构造函数的引用:
public <T> void genericMethod(Supplier<T> cons) {
T t = cons.get();
}genericMethod(String::new);
以上是 Java实例化泛型类型 的全部内容, 来源链接: utcz.com/z/361367.html