Java 泛型及通配符
时间: 2025-03-05 08:45:45 浏览: 38
### Java 泛型及其通配符的用法
#### 泛型简介
Java 编程语言自 JDK 1.5 起引入了泛型这一特性,允许定义类型安全的方法、类和接口而无需指定具体的类型参数[^1]。
#### 泛型方法示例
通过使用泛型方法可以在不牺牲类型安全性的情况下提高灵活性。当希望某个方法能够处理多种数据类型的对象时,可以声明该方法为泛型方法:
```java
public class Util {
// 定义一个简单的交换函数作为泛型方法的例子
public static <T> void swap(T[] array, int i, int j) {
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
```
上述代码展示了如何创建接受任意数组并能对其元素进行互换操作的通用工具类 `Util` 中的一个静态成员函数 `swap()` 方法[^3]。
#### 使用通配符增强灵活性
为了进一步提升程序设计中的弹性,在某些场景下可能需要利用通配符来代替具体类型参数。例如,如果想要编写既能读取又能写入集合内项目的算法,则应采用上下界限定的方式实现:
- **上界通配符** (`<? extends A>`): 表明未知的具体类型是给定类型的子类;
- **下界通配符** (`<? super B>`): 则意味着未知的确切类型至少实现了特定父类的功能;
下面是一个展示如何运用这两种形式的操作实例:
```java
import java.util.ArrayList;
import java.util.List;
// 假设有两个接口A,B以及它们各自的实现类C,D,E,F...
interface A {}
class C implements A {}
interface B {}
class D implements B {}
class E extends Object implements B {}
// 下面这个例子说明了如何使用带有限制条件的通配符
void copy(List<? extends Number> sourceList, List<? super Integer> destList){
for (Number element : sourceList) {
// 只有当sourceList里的所有元素都可以被转换成Integer的时候才能放入destList中去
if(element instanceof Integer){
destList.add((Integer)element);
}else{
System.out.println("Element cannot be cast to Integer");
}
}
}
ArrayList<Integer> integerNumbers = new ArrayList<>();
integerNumbers.add(1);integerNumbers.add(2);
ArrayList<Number> numbers = new ArrayList<>(integerNumbers);
ArrayList<Object> objects = new ArrayList<>();
copy(numbers,objects); // 正确调用
```
此段代码片段解释了如何借助于带有边界约束的通配符完成不同类型列表间的安全复制过程[^2]。
阅读全文
相关推荐


















