类型参数不能用于实例化方法内部的对象 。
public static <T> void add(Box<T> box) { //compiler error //Cannot instantiate the type T //T item=new T(); //box.add(item); }
要实现此类功能,请使用反射。
链接:https://www.learnfk.comhttps://www.learnfk.com/java-generics/java-generics-no-instance.html
来源:LearnFk无涯教程网
public static <T> void add(Box<T> box, Class<T> clazz) throws InstantiationException, IllegalAccessException{ T item = clazz.newInstance(); //OK box.add(item); System.out.println("Item added."); }
package com.learnfk; public class GenericsTester { public static void main(String[] args) throws InstantiationException, IllegalAccessException { Box<String> stringBox = new Box<String>(); add(stringBox, String.class); } public static <T> void add(Box<T> box) { //compiler error //Cannot instantiate the type T //T item=new T(); //box.add(item); } public static <T> void add(Box<T> box, Class<T> clazz) throws InstantiationException, IllegalAccessException{ T item = clazz.newInstance(); //OK box.add(item); System.out.println("Item added."); } } class Box<T> { private T t; public void add(T t) { this.t = t; } public T get() { return t; } }
这将产生以下输出-
Item added.
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕