java泛型extend和super
时间: 2023-08-13 22:54:34 浏览: 48
Java泛型中的extend和super是用于限制泛型类型参数的关键字。
extend用于限制泛型类型参数的上界,表示泛型类型参数必须是指定类型的子类或实现类。例如,List<? extends Number>表示泛型类型参数必须是Number类或其子类。
super用于限制泛型类型参数的下界,表示泛型类型参数必须是指定类型的父类或超类。例如,List<? super Integer>表示泛型类型参数必须是Integer类或其父类。
使用extend和super可以使泛型类型参数更加灵活,可以适应不同的场景需求。但是需要注意的是,使用过多的extend和super可能会导致代码可读性降低,因此需要根据实际情况进行选择和使用。
相关问题
java 泛型extend
Java 泛型中的 extends 关键字用于限制类型参数的范围。它可以用于类、接口和类型变量的声明中。
在类和接口声明中,extends 用于表示该类或接口是另一个类或接口的子类或子接口。
在类型变量声明中,extends 用于限制类型参数的范围。例如,定义一个泛型类时,可以使用 extends 限制类型参数只能是某个类或其子类,或者实现某个接口。
例如,下面的代码定义了一个泛型类 MyList,其中类型参数 T 必须是 Comparable 接口的子类型:
```
public class MyList<T extends Comparable<T>> {
private List<T> list;
public void add(T element) {
list.add(element);
}
public T max() {
T max = null;
for (T element : list) {
if (max == null || element.compareTo(max) > 0) {
max = element;
}
}
return max;
}
}
```
在上面的代码中,T extends Comparable<T> 表示类型参数 T 必须是 Comparable 接口的子类型,这样才能使用 compareTo 方法比较元素的大小。
泛型中的super和extends
在泛型中,super和extends是用来限制泛型类型参数的边界的关键字。
super关键字用于限制泛型类型参数的下限,表示该泛型类型参数必须是指定类型或指定类型的父类。例如,可以使用super关键字来定义一个泛型类,该泛型类的类型参数必须是Integer类型或Integer的父类。\[2\]
extends关键字用于限制泛型类型参数的上限,表示该泛型类型参数必须是指定类型或指定类型的子类。例如,可以使用extends关键字来定义一个泛型类,该泛型类的类型参数必须是Number类型或Number的子类。\[3\]
在泛型中,使用? extends A来表示一个只读型容器,其中的元素都是A类型或A的子类型。这样可以提供泛型协变,提高代码的复用性。例如,可以定义一个List<? extends A>类型的变量,它可以引用一个ArrayList<A>、ArrayList<B>或ArrayList<C>对象。\[1\]
而使用? super B来表示一个只写型容器,其中的元素都是B类型或B的父类型。这样可以提供泛型逆变,用于只写操作。例如,可以定义一个List<? super B>类型的变量,它可以引用一个ArrayList<A>对象。\[1\]
#### 引用[.reference_title]
- *1* [Java 泛型 ? extends 与 ? super](https://blog.csdn.net/qq_41490274/article/details/122886351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [Java泛型中extends和super的理解](https://blog.csdn.net/helloxiefei/article/details/129088874)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]