一.
泛型我们了解完基本原理之后,除了在集合中用来传递参数类型外,还有其它的应用。它还能为我们提供很多设计上的便捷。
介绍一下以前和现在的定义方法,有什么不一样。
这里面为了方便于应用,搞了一个工具类,和主要的程序分开发。
对工具类的描述,现在要操作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安全的多,但是书写麻烦,要写尖括号,