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 泛型。👍