类型参数不能用于在方法中实例化其对象.
public staticvoid add(Box box) { //compiler error //Cannot instantiate the type T //T item = new T(); //box.add(item);}
要实现此类功能,请使用反射.
public staticvoid add(Box box, Class clazz) throws InstantiationException, IllegalAccessException{ T item = clazz.newInstance(); // OK box.add(item); System.out.println("Item added.");}
示例
package com.it1352; public class GenericsTester { public static void main(String[] args) throws InstantiationException, IllegalAccessException { BoxstringBox = new Box (); add(stringBox, String.class); } public static void add(Box box) { //compiler error //Cannot instantiate the type T //T item = new T(); //box.add(item); } public static void add(Box box, Class clazz) throws InstantiationException, IllegalAccessException{ T item = clazz.newInstance(); // OK box.add(item); System.out.println("Item added."); } }class Box { private T t; public void add(T t) { this.t = t; } public T get() { return t; } }
这将产生以下结果 :
Item added.