JAVA-初步认识-常用对象API(集合框架-泛型-泛型类)

一.

泛型我们了解完基本原理之后,除了在集合中用来传递参数类型外,还有其它的应用。它还能为我们提供很多设计上的便捷。

介绍一下以前和现在的定义方法,有什么不一样。

这里面为了方便于应用,搞了一个工具类,和主要的程序分开发。

对工具类的描述,现在要操作person,要用工具类对person对象进行操作,可以完成person对象的设置和获取。

这个工具类只能操作person,不能操作其它对象。如果想要其它对象,还要书写Tool1,Tool2......这样很麻烦,怎么办?(对传输进来的person对象进行操作)

可以不可以定义一个工具类,操作所有对象。如果想定义一个工具类,操作所有对象,应该找到所有对象的共性,比如将这里的person改为object就可以了。

如果写成object了,那就意味着什么对象都能操作。

有一个快捷修改操作,如上图所示。

现在演示一下,建立学生和工人,以及人这三个类,学生和工人都继承人这个类,这是下面演示的基础。(这些都是在泛型主函数之外的部分)

现在往主函数中创建一个工具类,然后传入一个学生类,再通过gerobject取出学生类。图书显示了波浪线,表明出错了。

出错的原因是:学生往工具类中存储后,就意味着向上转型了,接着往外取的时候就是object类。要想取出特有类型的话,必须要强转。

上面是我们以前的做法,运行一下,没有出错。

现在一不小心,往里面传递了一个worker类,

回过去看tool类,里面接收的是object类,所以往里面存储student类,或者worker类,都是可以的。编译时不会报错,但是上述程序在运行时出现了错误。

这就是我们以前的做法,为了提高程序的扩展性,我们用的全都是object,什么对象都能往里面传递。好处是object出现,提高扩展性了,但是带有弊端了,就是要强转。不强转不能用。

现在做一些改动,对tool中装载有object的程序,做一个改动。

将修改前后写在一个java工具类中,上下对照着看。在写工具类的时候,这个是用来操作对象工具类,紧接着你要操作哪个对象,不确定。以前是用object,现在有了泛型,就不那么弄了。操作哪个对象,你给我传递,传递哪个,就操作哪个。在上面定义参数,这是5.0才有的。

以前玩Arralist是java定义好的,现在这个是我们定义的,这叫做自定义泛型类。

如果没有泛型就用object,你可以理解为泛型是object中的一种方案,但是这种方式更为安全。

现在回过来取修改前面错误的程序,

如果从头到尾都是student的话,编译运行是没有问题的,但是现在不小心输入了worker了。

上面的输入worker的写法,如果是早期的写法,运行的时候就出现了错误。现在改成泛型的写法,编译都通过不了。这就是泛型的好处,进一步验证了泛型将运行时的问题,转到了编译时期。避免了强转的麻烦。

这种方式要比object安全的多,但是书写麻烦,要写尖括号,

原文地址:https://www.cnblogs.com/wsw-bk/p/8361376.html

时间: 2024-08-04 05:47:13

JAVA-初步认识-常用对象API(集合框架-泛型-泛型类)的相关文章

JAVA-初步认识-常用对象API(集合框架-泛型-泛型限定-上限的体现)

一. 现在要说应用,查看一下API中的注释, 这里有一个方法addAll里面有extedns E,我们看一下这个方法什么时候用.下面这三个集合,有存储person,student,还有worker的. 再接下来演示一下这个高级应用,如果我们要去想定义一下集合的话,(描述一下集合) 这个类里面加入的元素不确定的情况下,写的是个E,明确什么类型,add方法中添加的也是什么类型.一次添加一个元素比较慢,addAll方法可以添加一堆元素, 一般情况下,就是这么写.(addAll又将mycollectio

JAVA-初步认识-常用对象API(集合框架-泛型-泛型方法)

一. 刚才说了一下泛型类,现在准备说另外一个,在工具类的基础上演示一下(基于上一节的泛型工具类). 本来如果是显示和打印String类的方法,参数中直接表明String类型即可,但是如果想显示和打印Intrger类型的参数,那么就需要将参数改为object. 基于泛型工具类,书写可以是下面这样的.工具类里面指定什么类型,方法就跟着操作什么类型. 这样书写是否行得通,来演示一下, 传递String类型时没有问题,但是工具类中的泛型是传递什么类型都可以,那么改成Integer试一下,集成工具显示了错

JAVA-初步认识-常用对象API(集合框架-泛型-泛型接口)

一. 什么叫泛型接口呢?之前的例子中创建了那么多类,很麻烦. 对截图的理解首先是,接口是抽象出来的类,声明之后,下面的类要进行实现.接口中的方法是实现的类都具备的.这里将接口和泛型结合起来.前面的章节中,是将泛型和类,方法结合起来. 泛型定义在类上,就是泛型类,定义在接口上,就是泛型接口.(接口定义了,肯定要实现) 这里是在一个程序中将要表达的意思全部书写出来了,定义接口,类来实现,主函数中创建对象.在定义的时候,参数类型是不确定的,用泛型T来表示,但是在实现时,就必须指定了. 接下来还有进一步

JAVA-初步认识-常用对象API(集合框架-List常用子类的特点)

一. 凡是虚线框都是接口,我们真正在使用的时候,用的是接口中的子类, List接口中,有一堆子类,是我们开发中常用的容器.ArrayList,LinkList,Vecter这三个算是开发中比较常用的. (list下面有三个常用的对象) 具体的容器必须明确其特点,那么你才知道什么时候该用这容器. 1. vector 容器之所以能够进行区分,是因为容器的内部的数据结构不一样,现在vector内部用的就是一个数组.数组本身就是一种存储数据的方式,本身就是一种结构.这种结构的特点在于,每一个元素上都带着

JAVA-初步认识-常用对象API(集合框架-体系共性功能)

一. 集合是个容器,用来存储对象的.当我们存储的对象数目变多的时候,会带来一些问题. 对象在集合里面装的时候,到底是如何进行存储的?有人说直接往里扔就是了,要注意,对于对象而言,不止集合这么一种容器. 对于对象的存储方式,每一个集合都有自己独特的定义,是根据某些需求而定的. 举例子来谈:用水杯泡茶,必须有过滤网,不然喝茶会有茶叶,如果只是喝白开水那么就不需要过滤网. 这说明容器自身都有其特定的结构,这种结构我们称之为数据结构,容器里面存储的就是数据. 数据到底按照什么样的方式来进行存放呢?我们称

JAVA-初步认识-常用对象API(集合框架-ListIterator接口)

一. 把list往外取的动作也说一下,(有可能说的是从list中取出元素的动作). 从list中取出所有的元素,采用iterator,因为list属于Colletion的子类,Colletion中具备的东西list也都有.(上面的截图中list只是一个空的容器,然后不断地往里面添加元素,或者删减元素)返回了iterator是怎么理解? DOS结果没有任何问题. list有自己特有的元素取出方式,list.get(index),输入集合中的某一个角标值,打印出来的结果就是该角标上的元素. 如果是取

JAVA-初步认识-常用对象API(集合框架-迭代器使用)

一. 我们完善完集合框架顶层接口Collection中常见方法学习以后,准备把存储在Collection集合中的元素给它取出来,因为存的目的就是为了方便取出来使用元素.这个取得动作,Colection给我们提供了一个迭代器的方法(迭代器是一个专业术语,意为取出集合中元素的方式). 取出元素的方式是个方法完成的,现在来演示一下. new谁不重要,只要能new就可以(Collection接口的子类很多,挑选一个创建对象). 调用集合的迭代器方法,返回集合中的迭代器对象,那么返回的这个对象是什么类型?

JAVA-初步认识-常用对象API(集合框架-Map集合常见子类对象)

一. 说完了map集合,顺便说些小东西. map集合常用的子类: hashtable研究的就是数据结构,哈希在1.0就出来了,那是还没有table.当时,单列集合只有vector,双列集合就是hashtable.内部结构就是哈希表.是同步的.hashmap和hashtable有区别么,效率高低不再多说.下图是hashmap的API注解,是不同步的. hashtable,它不支持空键和空值.面试的时候它们之间的区别. 上面截图的体系和一个集合体系很像,就是set集合,hashset和treeset

JAVA-初步认识-常用对象API(集合框架-重点方法entryset演示图解)

一. 对于上一节的操作而言,这里还有另外一种做法,相对而言,有一点麻烦. 从刚才的动作,总结出一个原理.map集合没有迭代器,但是我们可以把map转换成有迭代器的集合,比如说set. 这是为什么呢?为什么不返回arrylist,这是拿所有的键,键是唯一的,所以返回的应该是set集合,保证元素的唯一性. 接下来,在API当中,还有一个方法也是返回set集合,(这里的set有什么特殊含义么?) 现在用它来完成取出所有元素的方式.keyset大家比较容易明白,里面装的都是键.但是,entryset是返