Java中的泛型通配符使用方法详解

闪耀星辰 2025-02-01 ⋅ 38 阅读

什么是泛型通配符?

在Java中,泛型通配符是指一个未知类型的占位符。它可以用来表示任意类型,在泛型的灵活使用上发挥了重要作用。泛型通配符使用?表示。

泛型通配符的使用方法

泛型通配符主要有三种使用方法:?? extends? super

1. 问号(?

问号通配符表示可以匹配任意类型。在使用时,可以将?作为类型参数传入泛型类、方法或接口中。

示例代码:

public class GenericClass<T> {
    private T value;

    public GenericClass(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }

    public static void main(String[] args) {
        GenericClass<?> generic = new GenericClass<>("Hello");
        System.out.println(generic.getValue());
    }
}

上述代码中,GenericClass<?>表示一个未知类型的泛型对象,可以赋值给任何类型的泛型。

2. ? extends

? extends通配符表示泛型的上界限制,表示可以匹配某个类型以及其子类型。

示例代码:

public class GenericMethod {
    public static <T extends Number> double sum(List<T> numbers) {
        double sum = 0;
        for (T number : numbers) {
            sum += number.doubleValue();
        }
        return sum;
    }

    public static void main(String[] args) {
        List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
        List<Double> doubles = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5);

        double sumOfIntegers = sum(integers);
        double sumOfDoubles = sum(doubles);

        System.out.println("Sum of integers: " + sumOfIntegers);
        System.out.println("Sum of doubles: " + sumOfDoubles);
    }
}

上述代码中,<T extends Number>表示泛型的类型上界是Number类或其子类,所以可以使用intValue()doubleValue()等方法。

3. ? super

? super通配符表示泛型的下界限制,表示可以匹配某个类型以及其父类型。

示例代码:

public class GenericClass {
    public static void printList(List<? super Integer> list) {
        for (Object element : list) {
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        List<Number> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Object> objects = new ArrayList<>();

        printList(numbers);
        printList(objects);
    }
}

上述代码中,List<? super Integer>表示可以匹配Integer类型以及Integer的父类型,所以可以传递List<Number>List<Object>类型的参数。

总结

在Java中,泛型通配符的使用方法有三种:?表示任意类型,? extends表示上界限制,? super表示下界限制。合理使用泛型通配符可以提高代码的灵活性和重用性,是Java泛型的重要特性之一。


全部评论: 0

    我有话说: