java 类型用波浪线_JAVA-初步认识-常用对象API(集合框架-泛型-泛型类)

一.

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

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

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

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

c8d30c5af4b2686c08f9f109f9b02f71.png

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

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

570e84be063a25afb181f143a8939ac6.png

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

6e0d3b8abed6778bd6c7af6cba849a77.png

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

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

bbcf7adf4bab1facc642454a082dd182.png

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

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

3af70089678e4ec204bb4ba4f1167aea.png

3950197b2d27c83795d1f59477e48e89.png

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

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

5860b8fbac2726b72624308f1856fb5e.png

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

9b36a6e9d7059c04b7ef78b3b4d352ab.png

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

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

6d82d91876b529cb95dcec56e6a4dbf4.png

6102272f363aca638795bad0a225bed9.png

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

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

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

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

ccbef89a8793551b1ec45d9bf565bb4d.png

133353d67dda6fcc0b9bab1dff0df475.png

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值