天天看点

泛型(泛型类、方法、通配符、泛型的限定)

泛型的实质是将数据的类型参数化,在类、接口、方法中定义后,分别被称为:泛型类、泛型接口、泛型方法。泛型类、泛型接口和泛型方法在定义时都是在名字后面加<T>。

如:集合框架

1、泛型类

泛型(泛型类、方法、通配符、泛型的限定)

在实例化泛型类的过程中,必须使用引用数据类型。与方法的参数不同,泛型的参数可以在方法、类和接口中。

 2、泛型方法

定义遍历数组的泛型方法:

测试类:

泛型(泛型类、方法、通配符、泛型的限定)

(3)通配符(?)

泛型(泛型类、方法、通配符、泛型的限定)

在此方法中<?>通配符的使用,使参数的类型没有任何限制。

4、泛型的限定:

定义Animal抽象类:

定义Rabbit、Sheep类,实现Animal接口:

定义测试类:

在这个例子中,如果没有对传入迭代器的参数进行限定,那么传入的数据类型是任意的,对程序的安全性构成威胁。

上限通配为:?extends T

下限通配为:?  super T

5、泛型的好处

(1)把运行时期的问题提前到了编译期间 ,提高了代码的安全性

在定义集合的时候如果不指定泛型可以添加任意类型的数据,安全性是不足的,例如:在定义泛型的时候将泛型定义为Student类型的,那么该集合就只能存储Student类型的集合

如果使用非泛型编程,如下代码,就有可能在某些情况下会发生异常,因为list数组只要是对象就能存储但是并没有对对象的类型进行限制:

泛型(泛型类、方法、通配符、泛型的限定)
泛型(泛型类、方法、通配符、泛型的限定)

如果该用泛型编程,则可以避免这种异常,让编译器检查出错误。

 (2)不需要强制类型转换

如果用Object代表任意类型,向下转型要使用强制类型转换,此外,如果向List集合中存储一个String,存储Integer也是没有问题的,因为它是Object类型的

(3)泛型能够将参数的数据类型参数化,在编程中能够实现代码的复用,如:一个方法可以传递Student类型的对象,在使用泛型后也可以传递Teacher类型的对象,就不用写两个方法了

每个人都会有一段异常艰难的时光 。

生活的压力 , 工作的失意 , 学业的压力。

爱的惶惶不可终日。

挺过来的 ,人生就会豁然开朗。

挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。

——杨绛