关于LSP中泛型通配符?及extends和super的关系

先看Java代码

import java.util.ArrayList;
import java.util.List;

public class LSP {
	public static void main(String[] args) {
		List<?> list = new ArrayList<>();
		List<? super Double> list2 = new ArrayList<>();
		List<? super Number> list3 = new ArrayList<>();
		List<Object> list4 = new ArrayList<>();
		List<? extends Object> list5 = new ArrayList<>();
		List<? extends Number> list6 = new ArrayList<>();
		List<? extends Double> list7 = new ArrayList<>();
		List<Double> list8 = new ArrayList<>();
		List<? super Object> list9 = new ArrayList<>();
	}
}

对于从 list1 到 list9 ,第 1 个到第 3 个 List 都是通过 ?、? extends 和 ? super 定义的泛型通配符。其中,? 和 ? extends 都表示上限未知的泛型类型(即某种类型或其子类),而 ? super 则表示下限为某种类型或其父类的泛型类型。因此,它们的父子关系如下:

List<?> 是 List<? extends Object> 的子类。

List<? super Double> 是 List<? super Number> 和 List<? extends Object> 的子类。

List<? super Number> 是 List<? extends Double> 和 List<? extends Object> 的父类。

List 是 List<? super Object> 和 List<? extends Object> 的父类。

List<? extends Object>、List<? extends Double> 和 List<? extends Number> 之间没有继承关系,它们只有共同的父类 List<?>。

List 是 List<? extends Double> 的子类,但不是 List<? extends Number> 和 List<? extends Object> 的子类。

List<? super Object> 是 List<? extends Number> 的父类,但不是 List<? super Double>、List<? extends Double> 和 List 的父类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值