java学生类的泛型集合_JAVA-初步认识-常用对象API(集合框架-泛型-泛型类)

一.

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

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

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

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

25fccbb5f61600fc3a850e053eb51a6ebb1.jpg

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

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

7a411281213db5f98acab6fc60bd777b534.jpg

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

aa556c22754acdaaeadc93876494fac6cd5.jpg

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

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

c44e165e950ee88319315bfca145de73d3b.jpg

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

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

e60306a1c1014117b2c41cd7246779a5854.jpg

2a0eafc4df38f7aecf695adbbd45469df6e.jpg

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

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

e08d2e7f3a1b9090184f37a9742d6a3cd8a.jpg

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

0a474826a3f70f1e874d06197f6bbfb5a57.jpg

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

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

df428a6b4b97d2eaabe224e66670eb5a9f5.jpg

74aae56ddc45ec8d6353743de3a6c519b7d.jpg

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

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

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

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

6031b9991324ead429774e8506a9efd6899.jpg

7f68a1aef741e925e5b4aeb294b9c05ad2e.jpg

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值