泛型的分类:
泛型类、泛型接口、泛型方法
- 泛型类
public class Student<T> {
private T key;
public Student(T key) {
this.key = key;
}
public T getKey() {
return key;
}
}
使用时,可直接new Student<String>()或者new Student<Integer>()
- 泛型接口
public interface People<E> {
void printInfo(E e);
void printHeight(E e);
}
使用方法:
子类实现接口
public class Test08 implements People<Teacher>{
@Override
public void printInfo(Teacher teacher) {
System.out.println(String.format("姓名:%s;工号:%s;身高:%d",teacher.getName(),teacher.getTeacherNo(),
teacher.getHeight()));
}
@Override
public void printHeight(Teacher teacher) {
System.out.println("身高:"+teacher.getHeight());
}
}
- 泛型方法
public static <T> void print(T[] arr){
StringBuilder sb = new StringBuilder();
for (int i=0;i<arr.length;i++){
sb.append(arr[i]).append("\t");
}
System.out.println(sb.toString());
}
使用方法:
public static void main(String[] args) {
String[] strGroup=new String[]{"哆啦A梦","大雄","小夫","胖虎"};
Integer[] intGroup=new Integer[]{100,90,80,100};
print(strGroup);
print(intGroup);
}
注意print方法,void前要加<T>
通配符
-
?表示不确定的 java 类型
-
T (type) 表示具体的一个java类型
-
K V (key value) 分别代表java键值中的Key Value
-
E (element) 代表Element
上下限
- 上限:<? extends 父类>,传入类型必须是该父类或者是父类的子类
- 下限:<? super 子类>,传入类型必须是该子类或者是子类的父类
public static void pk(ArrayList<? extends People> people){
//通过上下限便可以将这个问题解决掉
//要求传入的类型必须是People的子类才可以
}