类型参数不能用于在方法中实例化其对象。
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.");
}
示例
创建一个名称为:NoInstance.java 文件,并编写以下代码 -
package demo5;
public class NoInstance {
    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 has been added.");
    }
}
class Box<T> {
    private T t;
    public void add(T t) {
        this.t = t;
    }
    public T get() {
        return t;
    }
}
执行上面代码,得到输出结果如下 -
Item has been added.
					
						上一篇:
								Java泛型不能使用原始类型
												下一篇:
								Java泛型不能使用静态域
												
						
						
					
					
					