当前位置: 首页 > news >正文

Java中泛型ClassT、T与Class?

一.区别

单独的T 代表一个类型 ,而 Class<T>代表这个类型所对应的类, Class<?>表示类型不确定的类

E - Element (在集合中使用,因为集合中存放的是元素)
 T - Type(Java 类)
 K - Key(键)
 V - Value(值)
 N - Number(数值类型)
 ? -  表示不确定的java类型

举例说明: 
Set<T> 表示 集合里 是   T类的实例 
List<E> 表示  集合里 是  E类的实例 
List<?> 表示 集合里的对象类型不确定,未指定 
List 同 List<?> 是一样的。 

泛型的作用: 
1、用泛型: 
Java代码  收藏代码
List<T> list=new ArrayList<T>();  
T t=list.get(0);  

2、不用泛型: 
Java代码  收藏代码
List  list=new ArrayList();  
T t=(T)list.get(0);

二、如何创建一个Class<T>类型的实例?

      就像使用非泛型代码一样,有两种方式:调用方法 Class.forName() 或者使用类常量X.class。      Class.forName() 被定义为返 回 Class<?>。另一方面,类常量 X.class 被定义为具有类型 Class<X>,所 以 String.class 是Class<String> 类型的。

三、方法中为什么需要<T> T修饰呢

泛型的声明,必须在方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。

public static <T> T request2Bean(HttpServletRequest request,Class<T> clazz){}

其中第一个<T>是与传入的参数Class<T>相对应的,相当于返回值的一个泛型,后面的T是返回值类型,代表方法必须返回T类型的(由传入的Class<T>决定)

另外,附上我的一段Java代码:

private JsonResult<Object> getBase(String model, Class<?> cls){
    JsonResult<Object> jsonResult = new JsonResult<Object>();
    String json = "";
    try {
        json = C4IUtils.Search(null, model, 0);
    } catch (Exception e) {
        jsonResult.setCode(500);
        jsonResult.setMsg(e.getMessage());
        
        return jsonResult;
    }
    
    List<?> list = JsonUtil.str2list(json, cls);
    
    jsonResult.setCode(200);
    jsonResult.setMsg("查询成功!");
    jsonResult.setData(list);
    
    return jsonResult;
}

 

相关文章:

  • 查询优化器
  • malloc(0)的返回值
  • linux安装mysql5.7.19
  • Python(生成执行文件)
  • Dart4Flutter - 不可变性
  • Android Toolbar的使用 顶部标题栏+后退键
  • 物联网技术周报第 141 期: 使用 Alexa Voice 和 Raspberry Pi 构建图片识别应用
  • MySQL中sync_relay_log选项对I/O thread的影响分析
  • IIS发布网站Microsoft JET Database Engine 错误 '80004005'的解决办法,基于Access数据库...
  • 13、jmeter抓包之浏览器请求
  • HDU 5969 最大的位或【贪心/按位或/思维】
  • Linux内核中的锁——知识点
  • 浅谈Service Mesh体系中的Envoy
  • 3 .5 数据库引擎优化顾问
  • 在 Windows 中安装 Laravel 5.1.X
  • extract-text-webpack-plugin用法
  • gf框架之分页模块(五) - 自定义分页
  • jquery ajax学习笔记
  • Laravel 菜鸟晋级之路
  • log4j2输出到kafka
  • Mocha测试初探
  • ReactNativeweexDeviceOne对比
  • SpiderData 2019年2月25日 DApp数据排行榜
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Spring-boot 启动时碰到的错误
  • Vue2.0 实现互斥
  • vue-router 实现分析
  • 记一次和乔布斯合作最难忘的经历
  • 利用jquery编写加法运算验证码
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 新版博客前端前瞻
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #QT(智能家居界面-界面切换)
  • (02)Hive SQL编译成MapReduce任务的过程
  • (6)设计一个TimeMap
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)c52学习之旅-点亮LED灯
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .NET CLR基本术语
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net操作Excel出错解决
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • []常用AT命令解释()
  • [HackMyVM]靶场 VivifyTech
  • [Hibernate] - Fetching strategies