Java 泛型学习笔记

什么是泛型?

Java 泛型是 JDK 5 引入的一种新特性,它允许在类或方法中使用参数化类型,以提高代码的安全性和重用性。通过使用泛型,我们可以编写更加通用的代码,使得代码的可读性和可维护性大大提高。

如何使用泛型?

定义泛型类

泛型类是具有一个或多个泛型类型参数的类。定义泛型类时,需要在声明类名后面使用尖括号 "<>" 包围一个或多个泛型类型参数,并在类中需要使用到的地方使用泛型类型参数。

例如,下面是一个泛型类的示例:

javaCopy Code
public 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 Code
public static <T> T getMax(T a, T b) { return a.compareTo(b) > 0 ? a : b; }

在上面的示例中,getMax 方法有一个名为 T 的类型参数,在方法体中使用了 T 类型参数。

使用通配符

通配符是一种用于指定未知泛型类型的特殊符号,它可以出现在类型参数列表和方法参数列表的位置。通配符分为无限制通配符 "?"、上界通配符 "? extends T" 和下界通配符 "? super T"。

无限制通配符 "?" 表示可以匹配任何泛型类型:

javaCopy Code
List<?> list = new ArrayList<>();

上界通配符 "? extends T" 表示只能匹配 T 或 T 的子类:

javaCopy Code
List<? extends Number> list = new ArrayList<Integer>();

下界通配符 "? super T" 表示只能匹配 T 或 T 的父类:

javaCopy Code
List<? super Integer> list = new ArrayList<Number>();

泛型使用示例

泛型类示例

下面是一个使用泛型类的示例,该泛型类将一个 Employee 对象存储在一个 List 中:

javaCopy Code
public 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 Code
public static <T> void printList(List<T> list) { for (T element : list) { System.out.println(element); } }

在上面的示例中,printList 方法使用了泛型类型参数 T,该泛型类型参数可以匹配任何类型的 List。printList 方法将 list 参数中的元素打印到控制台上。

总结

Java 泛型是一种非常有用的编程特性,可以提高代码的安全性和重用性。通过使用泛型类、泛型方法和通配符,我们可以编写更加通用、灵活的代码,并且可以避免一些类型转换的问题。