Java泛型中的通配符

Java中的泛型是一种参数化类型,可以使得代码更加灵活和可重用。在Java泛型中,通配符是一个特殊的符号,用来表示未知类型。通配符可以用来限制泛型的类型范围,达到更好的类型安全性。

通配符的分类

Java中的通配符主要分为三种:?? extends T? super T。其中,?表示未知类型,? extends T表示类型的上界限定为T或T的子类,? super T表示类型的下界限定为T或T的父类。

通配符的使用

通配符作为参数

通配符可以作为方法的参数,用来表示方法能够接受任意类型的参数。下面是一个示例代码:

public class Utils {
    public static void printList(List<?> list) {
        for (Object obj : list) {
            System.out.println(obj);
        }
    }
}

通配符的上界限定

通配符的上界限定可以用来限制泛型的类型范围。下面是一个示例代码:

public class Utils {
    public static <T extends Number> double sum(List<T> list) {
        double total = 0.0;
        for (T num : list) {
            total += num.doubleValue();
        }
        return total;
    }
}

通配符的下界限定

通配符的下界限定可以用来限制泛型的类型范围。下面是一个示例代码:

public class Utils {
    public static void addNumbers(List<? super Integer> list) {
        list.add(1);
        list.add(2);
    }
}

序列图

sequenceDiagram
    participant Client
    participant Utils
    Client->>Utils: Utils.printList(List<?> list)
    Utils->>Utils: for (Object obj : list)
    Utils->>Utils: System.out.println(obj)

旅行图

journey
    title Java泛型之通配符使用
    section 通配符作为参数
        Client->Utils: Utils.printList(List<?> list)
        Utils->Utils: for (Object obj : list)
        Utils->Utils: System.out.println(obj)
    section 通配符的上界限定
        Client->Utils: Utils.sum(List<T extends Number> list)
        Utils->Utils: for (T num : list)
        Utils->Utils: total += num.doubleValue()
    section 通配符的下界限定
        Client->Utils: Utils.addNumbers(List<? super Integer> list)
        Utils->Utils: list.add(1)
        Utils->Utils: list.add(2)

通过本文的介绍,我们了解到了Java泛型中通配符的基本概念和使用方法。通配符的灵活性和类型安全性可以帮助我们编写更加健壮的代码。希望本文对您有所帮助,谢谢阅读!