先看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 的父类。