Java泛型 - 不允许 实例

Java泛型 - 不允许 实例 首页 / 泛型入门教程 / Java泛型 - 不允许 实例

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

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.

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

赵成的运维体系管理课 -〔赵成〕

从0开始学微服务 -〔胡忠想〕

Nginx核心知识150讲 -〔陶辉〕

Swift核心技术与实战 -〔张杰〕

ZooKeeper实战与源码剖析 -〔么敬国〕

WebAssembly入门课 -〔于航〕

说透5G -〔杨四昌〕

PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕

AI 应用实战课 -〔黄佳〕

好记忆不如烂笔头。留下您的足迹吧 :)