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

java泛型 语法_Java泛型中的? super T语法

? super T 语法将泛型类限制为所有T的超类(包括T自身),但只能用于参数中,不可以在返回值用加以限定。

如果不加以限定,假设某个函数头为

? super Manager get()

由于编译器不知道该方法究竟会返回什么类,这样就只能用Object类来接收了。

该语法常用的一个情况是泛型类的比较

java.util.TreeSet 代表一个有序的元素为E的树,它其中的一个构造器需要一个Comparator类来比较两个元素,以E为String类时为例,此时的Comparator可以是Comparator,也可以是Comparator,但Comparator就不行,如何表示这样的限制呢?

jdk源代码中是这样的:

public TreeSet(Comparator super E> c)

这样就保证了传给构造器的Comparator是可以进行E元素的比较的。

另一个例子,java.util.Collections的max方法用于获得一个容器中的最大值,这个函数头可以这样写:

public static >  T max(Collection coll)

这样就限定T为能和自己比较的类,过于严格,jdk源码是这样的:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicstatic>T max(Collection<?extendsT>coll)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    Iterator<?extendsT>i=coll.iterator();

d18c02628675d0a2c816449d98bda930.png    T candidate=i.next();

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifwhile(i.hasNext())9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    T next=i.next();

d18c02628675d0a2c816449d98bda930.pngif(next.compareTo(candidate)>0)

d18c02628675d0a2c816449d98bda930.png        candidate=next;

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.pngreturncandidate;

8f1ba5b45633e9678d1db480c16cae3f.png}

很严谨的函数头,但是限定方面比较宽

相关文章:

  • java 模块化 组件化_关于模块化、组件化的理解
  • java isnull方法_Java 检查判断变量null(空值)的方法示例代码
  • java容器类的实现_java容器类总结——基于JDK1.8
  • MySQL实验7存储过程_存储过程 · MySQL5.7文档 · 看云
  • php mysql insert 默认_PHP MySQL Insert Into
  • 称重机 java_Java实现称重3次找到假球
  • triangle java_LeetCode Triangle Java版本
  • python用户重复输入_在Python中从用户输入中查找重复值
  • java类与类之间的类图_UML类图(Class Diagram)中类与类之间的关系及表示方式(转)
  • java按时间范围过滤_Java列表按日期过滤
  • java员工表代码_基于java+ssh员工考勤管理系统源代码
  • java返回指定json格式_java返回json格式数据
  • java字符型数据的长度_Java字符串创建和长度
  • java正则表达式笔记_java正则表达式笔记
  • java打印两个字符串_Java 按字母顺序中打印两个字符串的公共字符
  • @angular/forms 源码解析之双向绑定
  • 【mysql】环境安装、服务启动、密码设置
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 0x05 Python数据分析,Anaconda八斩刀
  • CSS 三角实现
  • css的样式优先级
  • docker python 配置
  • Docker下部署自己的LNMP工作环境
  • exif信息对照
  • Gradle 5.0 正式版发布
  • JS专题之继承
  • SpiderData 2019年2月13日 DApp数据排行榜
  • SpingCloudBus整合RabbitMQ
  • vue数据传递--我有特殊的实现技巧
  • windows-nginx-https-本地配置
  • 彻底搞懂浏览器Event-loop
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 微信小程序填坑清单
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 飞书APP集成平台-数字化落地
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #在 README.md 中生成项目目录结构
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (13):Silverlight 2 数据与通信之WebRequest
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)linux 命令大全
  • .NET 设计模式初探
  • .NET开源快速、强大、免费的电子表格组件
  • .NET实现之(自动更新)