泛型
简介
泛型是一种特殊的数据类型。 它是Java 的一个高级特性。定义一个语法结构时,不用指明具体类型,而是先定义一个类型变量,在真正使用的时候再确定该变量的具体类型。即类型参数化。
语法
泛型,定义在一对尖括号中,也是一个标识符,一般用在类名后,遵循大驼峰命名法。通常都是用一个大写字母。比如:
public class Student<T>{}
泛型的应用
泛型类的应用
将泛型用在类上时,这个类就叫做泛型类。 泛型定义在类名后
java">public class Person<T>{private T idCard;public Person(T idCard){this.idCard = idCard;}
//当一个子类继承带有泛型的父类时,一般情况下要给泛型参数赋值具体类名
class Student extends Person<Integer>{public Student(Integer inCard){super(idCard);}
}
//子类的泛型参数可以赋值给父类的泛型参数
class Teacher<E> extends Person<E>{public Teacher(E idCard){super(idCard);}
}
泛型接口的应用
将泛型用在接口上时,这个接口就叫做泛型接口。 泛型定义在接口名后。 用法和泛型类,一模一样。
泛型方法的应用
泛型不仅能用在类和接口上,还可以用在方法上。 需要把泛型定义在返回值类型前面。
java"> public static <T> boolean equals(T t1, T t2){return t1.equals(t2);}
泛型通配符
简介
泛型通配符用 ? 表示,代表不确定的类型,是泛型的一个重要组成。
在调用时,表示不关心具体类型。
也可以使用通配符规定调用时,传入的类型的范围,即上边界,和下边界。
上边界
代表类型变量的范围有限,只能传入某种类型,或者它的子类。
利用
<? extends 类名>
的方式,可以设定泛型通配符的上边界
java">public static void print(List<? extends Number> list){for(int i=0;i<list.size();i++){System.out.println(list.get(i));}
}
下边界
代表类型变量的范围有限,只能传入某种类型,或者它的父类。
利用
<? super 类名>
的方式,可以设定泛型通配符的下边界
java">public static void print2(List<? super Integer> list){for(int i = 0;i<list.size();i++){System.out.println(list.get(i));}
}