1.什么是类型参数
类型参数是一个占位符,代表一个未知的数据类型,在实际运行时会被具体的类型替代,用于定义泛型类、接口、方法,通常用大写字母表示,这些字母如T,E,K,V等约定俗成,它允许程序员进行更灵活的代码编写。
2.什么是泛型
泛型是运行将类型确定的工作延后到创建具体对象或者调用方法是再去确定的特殊的类型,在泛型使用的过程中操作的数据类型会被指定为类型参数,这种类型参数用于类、接口、方法,分别被称为泛型类,泛型接口,泛型方法。
3.为什么使用泛型
我们用Object类可表示任意类型,但是在实际使用过程中,会有类型转换,这为程序埋下了安全隐患,因此java提供了泛型来解决这个问题。
4.泛型的使用
泛型的通配符
?
?表示未知通配符,代表任意数据类型,但是使用了这个通配符,操作的元素就只能使用Obj'ect类中的方法,集合中自身元素的方法无法使用。
只能用于泛型声明时占位,不可以用于作为操作数据的类型。
? a = 10;//错误的写法
ArrayList<?>list = new ArrayList<>();//正确用法
super
用于指定类型参数的下界,通与通配符一起使用
表示该类型只能是Student类及其父类
ArrayList<? super Student>list = new ArrayList<>();
extends
用于指定类型参数的上界,通与通配符一起使用
表示该类型只能是Student类及其子类
ArrayList<? extends Student>list = new ArrayList<>();
1.泛型类
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
public final V setValue(V newValue) {
V oldValue = value;
value = newValue;
return oldValue;
}
}
2.泛型接口
public interface Map<K,V> {
V get(Object key);
}
3.泛型方法
public final V setValue(V newValue) {
V oldValue = value;
value = newValue;
return oldValue;
}
注意:泛型不存在继承关系
ArrayList<Object> list = new ArrayList<String>; //错误写法,不存在泛型继承关系
5.使用泛型的好处
1.提高了代码的复用性,对于一些通用的代码和算法,我们使用泛型避免重复写了不同数据类型的同种方法。
2.提高了代码的可读性,使用泛型我们看到泛型就明确的指知道了它使用的数据类型。
3.提高了代码的安全性,使用泛型限定了特定的数据类型,使代码更加安全。