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

Java 中的通配符泛型
通配符泛型为 Java 泛型提供了使用通配符来表示未知类型的功能。它补充了对特定类型参数化的限制,允许编写更通用的代码。
上限和下限通配符
有两种通配符:上限和下限。
上限通配符(? extends Type):表示通配符类型扩展自给定类型。它限制了泛型类型只能是给定类型的子类或其本身。
下限通配符(? super Type):表示通配符类型是给定类型的超类或其本身。它限制了泛型类型只能是给定类型的父类或其本身。
语法
要使用通配符泛型,请在泛型声明中使用通配符符号(?),后跟可选的上限或下限界限:
<t extends type> // 上限通配符 <t super type> // 下限通配符</t></t>
实战案例
考虑一个比较两个列表元素的比较器:
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);
}
}</t>
此比较器适用于任何实现了 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);
}
}</t>
现在,这个比较器可以与任何类型(只要它是 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</comparable></string></integer>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











