Java 泛型是 Java 语言的一个重要特性,它允许我们在编写代码时进行类型检查,从而避免运行时类型错误。在上一节中,我们学习了泛型的基础知识,本节我们将继续深入探讨 Java 泛型的进阶用法。
1. 泛型方法
泛型方法允许我们在方法签名中使用类型参数。以下是一个泛型方法的示例:
public static <T> T getMax(List<T> list) {
T max = list.get(0);
for (T element : list) {
if (element instanceof Comparable && ((Comparable<T>) element).compareTo(max) > 0) {
max = element;
}
}
return max;
}
在上面的代码中,<T>
表示一个类型参数,它将被实际传入的方法参数类型所替代。这样,getMax
方法可以接受任何类型的列表,并返回列表中的最大元素。
2. 泛型接口
泛型接口允许我们在接口中使用类型参数。以下是一个泛型接口的示例:
public interface Comparable<T> {
public int compareTo(T o);
}
在上面的代码中,<T>
表示一个类型参数,它将被实际传入的类所替代。这样,任何实现了 Comparable
接口的类都必须提供一个 compareTo
方法,该方法接受一个类型为 T
的参数。
3. 泛型类
泛型类允许我们在类中使用类型参数。以下是一个泛型类的示例:
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
在上面的代码中,<T>
表示一个类型参数,它将被实际传入的类所替代。这样,Box
类可以存储任何类型的对象。
4. 类型通配符
类型通配符允许我们在泛型中使用一个占位符来表示任何类型。以下是一个类型通配符的示例:
public static void printList(List<?> list) {
for (Object o : list) {
System.out.println(o);
}
}
在上面的代码中,<?>
表示一个类型通配符,它表示任何类型的对象。这样,printList
方法可以接受任何类型的列表。
扩展阅读
如果你对 Java 泛型还有更多疑问,可以阅读以下教程:
希望这些内容能帮助你更好地理解 Java 泛型。👍