Java 基础回顾之泛型

一、泛型的引入

继承是面向对象的三大特性之一,比如在我们向集合中添加元素的过程中 add() 方法里填入的是 Object 类,但是 Object 又是所有类的父类,所以这就产生了一个问题——添加的类型无法做到统一,因此就可能出现我们在遍历集合的时候,取出的元素类型不统一进而代码报错。
举个栗子:
例如:向一个 ArrayList 集合中添加 Animal 类的对象,但是我们不小心添加了一个 Person 类的对象,这就会导致如下结果
image.png
传统的方式不能对加入到集合 ArrayList 中的数据,进行类型约束(不安全)遍历的时候,所以需要进行类型转换,如果集合中的数据量较大,对效率会有影响,这就极大地降低了程序的健壮性,因此设计者针对此问题引入了泛型。

二、使用泛型的好处

  1. 提升了程序的健壮性和规范性;

针对上述问题,当我们采用泛型就会显得非常简单,只需要在编译类型后利用泛型指定一个特定类型,编译器就会自动检测出不符合规范的类并抛出错误提示。
image.png

  1. 编译时,检查添加元素的类型,提高了安全性;
  2. 减少了类型转换的次数,提高效率;
  • 当不使用泛型时:

image.png

  • 当使用泛型时:

image.png

  1. 在类声明时通过一个标识可以表示属性类型、方法的返回值类型、参数类型;

image.png
可以这样理解:上述的 class Animal< E > 中的「E」相当于这里的 E 是一个躯壳,占位用的,以后定义的时候我们可以自己去自定义。
例如:
image.png

三、泛型常见用法

1.定义泛型接口

如果在写接口的时候都没有定义泛型,它默认的就是 Object 类,其实这样写是不规范的。
image.png
在上述的泛型接口中已经规定传入其中的必须是 A,B 类的对象,那么当我们传入其他类的对象时就会报错。

2.定义泛型集合

使用泛型方式给 HashMap 中放入三个学生对象,并输出对象信息;
image.png

四、泛型使用细节

1.<>中类型规范

image.png
类型实参不能为基本数据类型。

2.继承性体现

在给泛型指定具体类型后,可以传入该类型或者其子类类型。

P<A> ap = new P<A>(new A());
P<A> ap1 = new P<A>(new B()); //A的子类
class A {
    
    }
class B extends A{
    
    }

猜你喜欢

转载自blog.csdn.net/weixin_44129618/article/details/129229755