为什么要引入泛型
泛型的本质就是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。
也就是说泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
引入的意义在于:
适用于多种数据类型执行相同的代码。
如果没有泛型,要实现不同类型的加法,每种类型都需要重载一个add方法;通过泛型,我们可以复用为一个方法
如图中所示,要是有不同的数据类型就要重写许多的方法
泛型限定
如果想要对?泛型通配符的使用范围进行限制,那么可以使用泛型限定(上限,下限)
<? extends A>:泛型类型要么是A类,要么是A类的子类, 孙子类…。 上限。
<? super A>: 泛型类型要么是A类,要么是A类的父类, 爷爷类 直到Object类。 下限。
###枚举类型
定义:
用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。是指将变量的水电费水电费水电费列出来,变量的值只限于列举出来的值的范围内。
在JDK1.5 之前,我们定义常量都是: public static fianl… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
public enum Color {
RED, GREEN, BLANK, YELLOW
}
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
###枚举实现单例模式:
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,这也就是通常所说类型
擦除 。