假设我们有List<List<String>>
和List<List<?>>
.
显然,类型参数 ?包含类型参数 String,因此 List<?>
是 List<String>
的直接父类(super class)型.
但是,当类型参数是参数化类型时,子类型如何工作。所以,是List<List<?>>
List<List<String>>
的父类(super class)型?如果是,为什么?
最佳答案
List<List<?>>
不是 List<List<String>>
的父类(super class)型.
List<List<?>>
表示该对象是一个列表,其中包含未知对象的列表。
List<List<String>>
表示该对象是一个列表,包含 String
的列表对象。
如您所见,在第一个示例中,列表可以包含任何对象,不一定是 String
的父类(super class)型。 .
更新:
好的,这是一些详细的解释。
问号 (?) 的意思是:“任何可能类型的对象”或“任何扩展 Object
和 Object
本身的对象”。大致可以考虑List<?>
如List<Object>
.
是Object
String
的父类(super class)型?是的。但考虑这个例子:
class A {
}
List<A> list1 = new ArrayList<>();
List<String> listOfStrings = new ArrayList<>();
List<?> unknownList = list1;
这是否意味着unknownList
包含 String 父类(super class)型的对象? 否。
它仅意味着此列表可能包含扩展 Object
的任何对象或Object
本身并应相应对待。
关于java - 当类型参数是参数化类型时的子类型化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55632134/