什么是泛型?
泛型提供了编译时类型检查安全机制,通过泛型可以让程序员在编译器就检测到非法的类型,从而对数据类型做出调整。
为什么出现泛型?
原因:在没有泛型的Java版本中,如果因为不小心和误操作,集合或者数组中存放的某个元素与其他元素类型不一致,读取的时候会默认将元素解析为Object类型,那么就会导致程序报错。
1.5版本JDK后,有了泛型后,通过对集合、数组等进行泛型标注,编译期如果集合或数组内存放的元素类型不一致,就会提示程序员,同时泛型的标注也使得程序员能知道集合或数组中存放的是什么数据类型的元素,方便编码工作的展开。
泛型类
泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。
泛型方法的类型参数只能代表引用型类型,不能为基本数据类型。
代码示例:
public class TestFanxing<T>{
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public static void main(String[] args) {
TestFanxing<Integer> tf = new TestFanxing<Integer>();
tf.setT(666);
System.out.println(tf.getT());
}
类型通配符
①一般通过?号来代替具体的类型参数。如List<?>代表如List、List等所有List<具体类型实参>的父类。
②类型通配符上限。如List<?extends Number>接受Number及其下层子类类型
③类型通配符下限。如List<?super Number>表示类型只能接受Number