JavaSE学习笔记-12

泛型

 为什么要引入泛型?

正如上面图片所示,当我们想着遍历集合并且进行对Dog进行向下转型【因为我们遍历出来的Dog编译类型都是Object,我们不可以直接调用Dog类中包含的属性方法】

即:Object o=集合中的对象;【编译类型都是Object】

所以我们必须进行向下转型,把dog这个对象引用的编译类型和运行类型都改为 Dog才可以

但是呢?假如说我们其中在集合中不小心添加了一个猫对象,那么之后强制向下转型就会在运行之后出现异常,编译的时候编译器是不会报错的【因为输出对象的编译类型都是Object】

【因为遍历输出时Object o=集合中的对象,所以输出对象的编译类型都是Object】

泛型的好处 

使用泛型之后

 不使用泛型时 遍历时必须是Object

使用泛型之后,可以直接取出Dog类型而不是Object类型

 

泛型介绍

 1.

 等于说把创建对象时,指定泛型的类型传给了E

那么也就等价于下图:

把创建对象时指定的泛型String传递给了我们的Person类中的E,那么直接等价写出替换后的结果

 当然,创建对象时传入的泛型类型可以任意类型。可以是String ,Integer,等等也可以是自定义类型

 注意:

 也就是说,设置为泛型String是在编译期间就确定了,所以创建对象时传参数传一个整形是错误的

 同理:

 泛型的语法

 泛型练习

创建对象时,进行替换操作,我们在定义HashMap的时候,就已经把这个泛型确定了,就已经替换了

 代码如下:

 泛型使用注意事项及细节

1.

2.重点

第一步:

对于一个泛型,当在我们创建对象的时候就会指定一个泛型类型 A,那么类Pig的E都被进行替换

每创建一次对象,我们就可以对创建对象时传入的泛型类型进行替换操作

第二步:

当我们调用构造器传参数进行创建对象的时候,

对于第一个传参是new A(),即是 A e=new A();

 对于第二个传参是new B(),即是A e=new B();

如果B不继承A,那么就不可以传参数new B()给到Pig类的构造器

 4.

当使用泛型Pig之后

 

 泛型练习

 

 总结一下这道题的细节:

1.

我们可以进行调用ArrayList的sort方法,并且可知参数类型是一个Comparator接口

我们可以传一个匿名内部类当作实现这个接口,并且重写这个接口中的抽象方法compare

源码:

2.这个泛型替换

 源码:这两处都会根据指定泛型而更改

 3.

把对生日方法的比较法则封装到这个MyDate类中,

即是重写这个接口中的抽象方法compareTo方法

 自定义泛型

 6.

因为静态方法或属性是在类加载时就进行初始化的,我们知道类加载是发生在创建对象之前的。

并且泛型的替换及作用是发生在创建对象的时间段的。。。。

所以时间段是相互冲突的,所以编译器不知道该怎么办,,所以报错了。。。。。

 

 当创建Tiger对象的时候,我们把设置对应的泛型把T R M进行对应的替换

自定义泛型的细节

 在接口中的成员默认是静态的,所以不可以使用泛型

1.

当继承接口的时候,就指定了泛型接口的类型

 2.

 3.当实现接口之后,接口没有指定泛型类型,那么默认为Object类型,当实现接口的抽象方法之后,默认把U和R替换为Object

 规范写法:

1.

泛型方法,可以定义在普通类中,也可以定义在泛型类中

2.

对于泛型方法,我们在调用的时候 就确定它的类型了 

 3.

要明白泛型方法与方法使用泛型的区别

 4.

泛型方法,可以使用类声明的泛型,也可以使用自己声明的泛型

 把泛型理解为可以接收数据类型的一种数据类型就可以了。。。。

 泛型练习

泛型与通配符结合 

1.错误

 2.

 

 

 4.

 JUnit单元测试框架

 传统方式效率太低,并且要来回进行切换,在静态方法中调用非静态方法的时候还需要进行创建对象,这样显得十分难受

单元测试框架JUnit如何使用?

 1.在方法头写上@Test

2.接着用Alt+Enter之后,我们选取的JUnit5.4版本

 3.

 

3.在测试区出现绿色小箭头,点Run表示运行

 练习

 

 

 【554-567】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值