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

java 泛型定义_Java中泛型定义的含义

微信18924630379

在Java的应用中,有一个非常好的东西,可以让我们在开发中避免很多不必要的数据应用错误,它就是泛型。

我们都知道,泛型是一种数据类型约束机制,是一个数据应用规则,指定了泛型之后,就只能按照这个规则来使用相应的数据,比较一个List集合,默认是可以装任何东西,看上去功能非常的强大,而事实上也是如此,但问题就出现在太过强大上。就比如把两种保质期不一样的食物放在一个罐子中,保质期短的食物会先发霉长虫子,影响到保质期长的食物,为了不浪费粮食,我们就把相同保质期的食物单独放在不同的罐子中,也就变成了不同类型的数据使用不同的List来装是一样的。

那么要指定哪个List装什么数据,这就要使用到泛型了。

泛型的指定,原则上是可以任意的,你可以使用Q,可以使用A,也可以使用W。

但在实际的开发中,作为一个合格的4有开发者,我们会有自己的一套不成文的规定,对于泛型的使用,在一些API中,往往会看到E、T、V、K,这些泛型都是有特定意义的。

Ø E - Element (在集合中使用,因为集合中存放的是元素),E是对各方法中的泛型类型进行限制,以保证同一个对象调用不同的方法时,操作的类型必定是相同的。E可以用其它任意字母代替

Ø T - Type(Java 类),T代表在调用时的指定类型。会进行类型推断

Ø K - Key(键)

Ø V - Value(值)

Ø N - Number(数值类型)

Ø ? - 表示不确定的java类型,是类型通配符,代表所有类型。?不会进行类型推断

对于泛型的定义,最常见的,有以下几种方式:

泛型类定义

//紧跟类名后面

public classTest{}

泛型方法定义

//紧跟修饰符后面(public)

public T Test1(T t){}

当然,对于方法,还有静态方法,它的泛型定义是有注意事项的。

通配符使用

//变量赋值或变量声明时候使用

List> list;

List extends Number> uNumberList;

List super Integer> intgerList;

List<?extends T>和List super T>有什么区别

List extends T>可以接受任何继承自T的类型的List,

List super T>可以接受任何T的父类构成的List。

例如List extends Number>可以接受List或List。

相关文章:

  • 字符串转数组java_java数组与字符串相互转换、整型与字符串相互转换【详解】...
  • 简单描述mysql视图的概念_介绍mysql中视图的概念及操作
  • java web 与asp.net_JavaWeb与Asp.net工作原理比较分析
  • java 对象序列化磁盘_java对象的序列化以及反序列化详解
  • java --help_java help
  • java linux 接口_理解Java中的接口
  • java dns 缓存_Java DNS解析缓存的过期策略配置
  • java 二叉树图形_java实现二叉树以及实例
  • java tree的使用_Java TreeSet的使用
  • java矩形_JAVA实现矩形(长方形)的周长面积计算
  • phymeleaf 除取整_【Bug档案01】Spring Boot的控制器+thymeleaf模板 -使用中出现静态资源加载路径不当的问题 -解决时间:3h...
  • python 矩阵乘法梯度下降_使用python numpy矩阵类的梯度下降
  • oracle 存储过程调用java_oracle 存储过程调用java一
  • java春天_java – 春天的Aspectj
  • java开发微信设计论文_集客微信公众号: 本科毕业设计:基于WxJava框架的集客微信公众号的设计与实现...
  • “大数据应用场景”之隔壁老王(连载四)
  • 【css3】浏览器内核及其兼容性
  • 2018一半小结一波
  • AHK 中 = 和 == 等比较运算符的用法
  • const let
  • ES6系列(二)变量的解构赋值
  • HTTP 简介
  • java小心机(3)| 浅析finalize()
  • Mysql优化
  • vue-router的history模式发布配置
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 番外篇1:在Windows环境下安装JDK
  • 入口文件开始,分析Vue源码实现
  • 思否第一天
  • 我这样减少了26.5M Java内存!
  • 小程序 setData 学问多
  • 应用生命周期终极 DevOps 工具包
  • 最简单的无缝轮播
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 安徽锐锋科技IDMS系统简介
  • #AngularJS#$sce.trustAsResourceUrl
  • #Linux(权限管理)
  • (13)Hive调优——动态分区导致的小文件问题
  • (javascript)再说document.body.scrollTop的使用问题
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (四)linux文件内容查看
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)jQuery 基础
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)虚函数剖析
  • .net CHARTING图表控件下载地址
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net core控制台应用程序初识
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 服务 ServiceController