Java 泛型学习笔记
什么是泛型?
Java 泛型是 JDK 5 引入的一种新特性,它允许在类或方法中使用参数化类型,以提高代码的安全性和重用性。通过使用泛型,我们可以编写更加通用的代码,使得代码的可读性和可维护性大大提高。
如何使用泛型?
定义泛型类
泛型类是具有一个或多个泛型类型参数的类。定义泛型类时,需要在声明类名后面使用尖括号 "<>" 包围一个或多个泛型类型参数,并在类中需要使用到的地方使用泛型类型参数。
例如,下面是一个泛型类的示例:
javaCopy Codepublic class MyGenericClass<T> {
private T data;
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}
在上面的示例中,MyGenericClass 类有一个名为 T 的类型参数,在 setData 和 getData 方法中使用了 T 类型参数。
使用泛型方法
泛型方法是具有一个或多个泛型类型参数的方法。定义泛型方法时,需要在方法返回值前面使用尖括号 "<>" 包围一个或多个泛型类型参数,并在方法中需要使用到的地方使用泛型类型参数。
例如,下面是一个泛型方法的示例:
javaCopy Codepublic static <T> T getMax(T a, T b) {
return a.compareTo(b) > 0 ? a : b;
}
在上面的示例中,getMax 方法有一个名为 T 的类型参数,在方法体中使用了 T 类型参数。
使用通配符
通配符是一种用于指定未知泛型类型的特殊符号,它可以出现在类型参数列表和方法参数列表的位置。通配符分为无限制通配符 "?"、上界通配符 "? extends T" 和下界通配符 "? super T"。
无限制通配符 "?" 表示可以匹配任何泛型类型:
javaCopy CodeList<?> list = new ArrayList<>();
上界通配符 "? extends T" 表示只能匹配 T 或 T 的子类:
javaCopy CodeList<? extends Number> list = new ArrayList<Integer>();
下界通配符 "? super T" 表示只能匹配 T 或 T 的父类:
javaCopy CodeList<? super Integer> list = new ArrayList<Number>();
泛型使用示例
泛型类示例
下面是一个使用泛型类的示例,该泛型类将一个 Employee 对象存储在一个 List 中:
javaCopy Codepublic class EmployeeList<T extends Employee> {
private List<T> employees = new ArrayList<>();
public void addEmployee(T employee) {
employees.add(employee);
}
public T getEmployee(int index) {
return employees.get(index);
}
public int size() {
return employees.size();
}
}
在上面的示例中,EmployeeList 类使用了泛型类型参数 T,该泛型类型参数必须是 Employee 或其子类。addEmployee、getEmployee 和 size 方法都使用了 T 类型参数。
泛型方法示例
下面是一个使用泛型方法的示例,该泛型方法将给定列表中的元素打印到控制台上:
javaCopy Codepublic static <T> void printList(List<T> list) {
for (T element : list) {
System.out.println(element);
}
}
在上面的示例中,printList 方法使用了泛型类型参数 T,该泛型类型参数可以匹配任何类型的 List。printList 方法将 list 参数中的元素打印到控制台上。
总结
Java 泛型是一种非常有用的编程特性,可以提高代码的安全性和重用性。通过使用泛型类、泛型方法和通配符,我们可以编写更加通用、灵活的代码,并且可以避免一些类型转换的问题。