Java 中的通配符泛型是什么?

java 中的通配符泛型允许使用通配符来表示未知类型,有上限(? extends type)和下限(? super type)两种通配符:上限通配符表示通配符类型扩展自给定类型,限制泛型类型只能是给定类型的子类或本身。下限通配符表示通配符类型是给定类型的超类或本身,限制泛型类型只能是给定类型的父类或本身。

Java 中的通配符泛型是什么?

Java 中的通配符泛型

通配符泛型为 Java 泛型提供了使用通配符来表示未知类型的功能。它补充了对特定类型参数化的限制,允许编写更通用的代码。

上限和下限通配符

有两种通配符:上限和下限。

上限通配符(? extends Type):表示通配符类型扩展自给定类型。它限制了泛型类型只能是给定类型的子类或其本身。

下限通配符(? super Type):表示通配符类型是给定类型的超类或其本身。它限制了泛型类型只能是给定类型的父类或其本身。

语法

要使用通配符泛型,请在泛型声明中使用通配符符号(?),后跟可选的上限或下限界限:

<T extends Type> // 上限通配符
<T super Type> // 下限通配符

实战案例

考虑一个比较两个列表元素的比较器:

public class Comparator<T> {
    public int compare(T o1, T o2) {
        if (o1 == null || o2 == null) {
            return o1 == null ? o2 == null ? 0 : -1 : 1;
        }
        return o1.compareTo(o2);
    }
}

此比较器适用于任何实现了 Comparable 接口的类,但假设我们希望使用一个未知类型的单个比较器来比较不同的列表。我们可以使用上限通配符:

public class GenericComparator<? extends Comparable<T>> {
    public int compare(T o1, T o2) {
        if (o1 == null || o2 == null) {
            return o1 == null ? o2 == null ? 0 : -1 : 1;
        }
        return o1.compareTo(o2);
    }
}

现在,这个比较器可以与任何类型(只要它是 Comparable)一起用于列表比较:

List<Integer> list1 = Arrays.asList(1, 2, 3);
List<String> list2 = Arrays.asList("a", "b", "c");

GenericComparator<Comparable> comparator = new GenericComparator<>();

System.out.println(comparator.compare(list1.get(0), list2.get(0))); // -1

以上就是Java 中的通配符泛型是什么?的详细内容,更多请关注其它相关文章!