假设我们有List<List<String>>
和List<List<?>>
。
显然,类型实参?包含类型参数String,因此List<?>
是List<String>
的直接超类型。
但是,当类型实参为参数化类型时,子类型化如何工作。那么,List<List<?>>
是List<List<String>>
的超类型吗?如果可以,为什么?
答案 0 :(得分:1)
List<List<?>>
不是{1>}的超类型。
List<List<String>>
表示此对象是一个列表,其中包含未知个对象的列表。
List<List<?>>
表示此对象是一个列表,其中包含List<List<String>>
个对象的列表。
如您所见,在第一个示例中,列表可以包含任何对象,不一定是String
的超类型。
更新:
好,这是一些详细的解释。
问号(?)表示:“任何可能的对象类型”或“任何扩展String
和Object
本身的对象”。大致可以将Object
视为List<?>
。
List<Object>
是Object
的超类型吗?是的。但是请考虑以下示例:
String
这是否意味着class A {
}
List<A> list1 = new ArrayList<>();
List<String> listOfStrings = new ArrayList<>();
List<?> unknownList = list1;
包含String的超类型的对象? 否。
这仅表示此列表可以包含任何扩展unknownList
或Object
本身的对象,并应进行相应处理。