无涯教程-Java泛型 - 不允许 实例

60 阅读1分钟

类型参数不能用于实例化方法内部的对象 。

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.");
}

完整示例

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.

参考链接

www.learnfk.com/java-generi…