博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA-初步认识-常用对象API(集合框架-泛型-泛型限定-上限的体现)
阅读量:4647 次
发布时间:2019-06-09

本文共 1146 字,大约阅读时间需要 3 分钟。

一.

现在要说应用,查看一下API中的注释,

这里有一个方法addAll里面有extedns E,我们看一下这个方法什么时候用。下面这三个集合,有存储person,student,还有worker的。

再接下来演示一下这个高级应用,如果我们要去想定义一下集合的话,(描述一下集合)

这个类里面加入的元素不确定的情况下,写的是个E,明确什么类型,add方法中添加的也是什么类型。一次添加一个元素比较慢,addAll方法可以添加一堆元素,

一般情况下,就是这么写。(addAll又将mycollection加入挺奇怪的,没看懂) 里面装什么类型(里面是指开头class后面泛型里的类型),我再添加新集合的时候,这集合也是什么类型(API中对于这个方法是有描述的,将一个集合添加进入某一个集合中)。为什么呢?

现在又有一个集合al4,往里面装的是string类型,不再一次添加一个元素,采用addAll方法直接将string集合添加进来。这里是不行的,规定了mycollection<E>中类型一致,这里的al4和al1中不是同一个类型。

如果不加泛型限定,能不能添加进来?如下图所示,将所有的泛型去掉。是可以的,为什么?

因为没有指定泛型,就是object,反正都是对象都可以往里面放。下面例子中,输出的元素的个数为3,有两个person对象,还有一个字符串对象。取得时候会出问题。

 

现在解释,为什么class开头和里面定义得方法都要同时是E的原因,要是类型不匹配,我明确的是person,但是往里面放的是字符串,取的时候转成字符串还是person是不清楚的,就会出事,会有安全隐患。

上面的例子就是一个集合中规定了类型是person,如果有其它集合中的元素想要存入该集合中,必须要保证类型一致,不然编译时会出错,或者开发平台会提示你出错。

经过一段时间,person产生了一些子类对象,比如说worker就是al2,现在想要将al2放进来。这是可以的,为什么呢?输出ptint.size的结果是四个,取得时候是按照person类型来取,因为al2是放置到al1中了,取得时候自然是按照al1来取得。person是可以接收student的,mycolleciton这个方法可以接收新集合中存储E类型元素的,也可以是E类型的子类的,因为取没有问题。

 取的时候不存在类型安全隐患,addAll方法扩展性很强,按理说写个E就可以了,现在扩展了子类来了也是可以的。

什么时候用这个呢?存储的时候,用的都是上限。这里的存储可能是说的class开头的mycollection的位置。

元素是对象,上限是类型,

 

转载于:https://www.cnblogs.com/wsw-bk/p/8443764.html

你可能感兴趣的文章
Factorials
查看>>
回车登陆代码(兼容IE和FF)
查看>>
搞懂Python的类和对象名称空间
查看>>
整理chinaUnix上【你职业生涯中最难忘的误操作】
查看>>
iOS - 事件处理全过程(补充)
查看>>
js基本概述
查看>>
5天学会fx-5800计算器测量编程(二) fx-5800函数学习
查看>>
Android 开发之 ---- bootloader (LK)
查看>>
android获取周围AP信息(下)
查看>>
linux 网络设备驱动
查看>>
使用 JDBC 驱动程序
查看>>
transform 属相拉伸变形
查看>>
用USBasp下载程序
查看>>
【数据库】oracle基本操作
查看>>
16.2.2 Space Needed for keys
查看>>
Codeforces Round #270(利用prim算法)
查看>>
选择排序
查看>>
怎样设计接口?
查看>>
Rabbitmq 加入用户訪控制台(guest无法登陆控制台问题)
查看>>
数据挖掘十大经典算法
查看>>