当类型实参是参数化类型时的子类型化

时间:2019-04-11 12:07:05

标签: java subtyping parameterized-types

假设我们有List<List<String>>List<List<?>>

显然,类型实参?包含类型参数String,因此List<?>List<String>的直接超类型。

但是,当类型实参为参数化类型时,子类型化如何工作。那么,List<List<?>>List<List<String>>的超类型吗?如果可以,为什么?

1 个答案:

答案 0 :(得分:1)

List<List<?>> 不是}的超类型。

List<List<String>>表示此对象是一个列表,其中包含未知个对象的列表。

List<List<?>>表示此对象是一个列表,其中包含List<List<String>>个对象的列表。

如您所见,在第一个示例中,列表可以包含任何对象,不一定是String的超类型。

更新:

好,这是一些详细的解释。

问号(?)表示:“任何可能的对象类型”或“任何扩展StringObject本身的对象”。大致可以将Object视为List<?>

List<Object>Object的超类型吗?是的。但是请考虑以下示例:

String

这是否意味着class A { } List<A> list1 = new ArrayList<>(); List<String> listOfStrings = new ArrayList<>(); List<?> unknownList = list1; 包含String的超类型的对象?
这仅表示此列表可以包含任何扩展unknownListObject本身的对象,并应进行相应处理。