在 java 中,泛型通配符允许表示泛型类型,而不指定具体类型。上限通配符 (<? extends t>) 表示类型参数 t 或其任何子类,允许接受列表中的子类数据。下限通配符 (<? super t>) 表示 t 或其任何超类,允许接受列表中的超类数据。通配符可用于实现可调整大小的带泛型的数组列表,允许处理各种类型和进行添加/删除操作。

Java 函数中的泛型通配符:上限和下限
在 Java 中,我们可以使用通配符来表示泛型类型,允许我们在不指定具体类型的情况下使用泛型。本文将探讨上限和下限通配符,并通过实战案例展示其用法。
上限通配符
立即学习“Java免费学习笔记(深入)”;
上限通配符 (<? extends T>) 表示类型参数 T 或其任何子类。例如:
public static <T extends Number> double sum(List<T> numbers) {
double total = 0;
for (T num : numbers) {
total += num.doubleValue();
}
return total;
}此函数可以接受任何 Number (如 Integer、Double) 或其子类的列表。我们可以安全地将任何满足 Number 约束的列表传递给此函数,如下所示:
List<Integer> ints = List.of(1, 2, 3); double sumIntegers = sum(ints); // 编译通过
下限通配符
下限通配符 (<? super T>) 表示类型参数 T 或其任何超类。例如:
public static <T super Number> void process(List<T> entities) {
for (T entity : entities) {
System.out.println(entity.getClass().getName());
}
}此函数可以接受任何 Number 的超类 (如 Object、Serializable) 的列表。我们可以安全地将任何满足 Number 超类约束的列表传递给此函数,如下所示:
List<Object> objects = List.of("Hello", 123);
process(objects); // 编译通过实战案例
考虑一个可调整大小的数组列表,我们可以使用泛型通配符来实现它:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ResizableArrayList<E> {
private List<E> list;
public ResizableArrayList() {
this(new ArrayList<>());
}
public ResizableArrayList(List<? super E> initialList) {
list = new ArrayList<>(initialList);
}
public void addAll(List<? extends E> elements) {
list.addAll(elements);
}
public void removeAll(List<? super E> elements) {
list.removeAll(elements);
}
public List<E> getList() {
return list;
}
public static void main(String[] args) {
ResizableArrayList<Integer> numbers = new ResizableArrayList<>(
Arrays.asList(1, 2, 3)
);
numbers.addAll(Arrays.asList(4, 5, 6));
numbers.removeAll(Arrays.asList(2, 3));
System.out.println(numbers.getList()); // [1, 4, 5, 6]
}
}这个可调整大小的数组列表可以处理任何类型 E,允许我们向列表中添加或从中删除各种对象。
以上就是Java 函数中的泛型通配符:上限和下限的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号