Java泛型 不能实例化

Java泛型 不能实例化 介绍

泛型类型参数不能用于在方法内实例化其对象。如:

public static <T> void add(Box<T> box) {
   //编译错误
   //不能实例化类型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.");
}

Java泛型 不能实例化 示例

package com.yiidian;

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) {
      //编译错误
      //不能实例化类型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;
   }   
}

输出结果如下:

热门文章

优秀文章