java - 当类型参数是参数化类型时的子类型化

标签 java subtyping parameterized-types

假设我们有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)型。 .

更新:

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

问号 (?) 的意思是:“任何可能类型的对象”或“任何扩展 ObjectObject 本身的对象”。大致可以考虑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/

相关文章:

java - InvokeLater 使用事件排序

java - Android客户端套接字无法连接到服务器

Java 二叉搜索树在运行时不打印

c# - 我可以获得代码契约(Contract)来警告我有关 "illegal"子类型的信息吗?

types - 通配符模式覆盖多态变体的子类型约束

java - "? extends E"和 "T extends E"有什么区别?

java - Apache Avro 框架可以在序列化期间处理参数化类型吗?

java - 使用 Java 参数化类型和多态性实现这种通用编程场景的方法

java - ANTLR v4 : How to implement deactivation of rule alternatives in listener like embedded semantic predicate in grammar file?

c++ - 在索引和值类型上参数化的惯用 vector 类型