zoukankan      html  css  js  c++  java
  • 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安全的多,但是书写麻烦,要写尖括号,

  • 相关阅读:
    Java学习二十九天
    Java学习二十八天
    47. Permutations II 全排列可重复版本
    46. Permutations 全排列,无重复
    subset ii 子集 有重复元素
    339. Nested List Weight Sum 339.嵌套列表权重总和
    251. Flatten 2D Vector 平铺二维矩阵
    217. Contains Duplicate数组重复元素
    209. Minimum Size Subarray Sum 结果大于等于目标的最小长度数组
    438. Find All Anagrams in a String 查找字符串中的所有Anagrams
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/8361376.html
Copyright © 2011-2022 走看看