java - 通用列表<>层次结构困惑

标签 java generics collections

Wildcards and Subtyping - Oracle Documentation

This document has a diagram shows the relationships between several List classes declared with both upper and lower bounded wildcards. The relationship as depicted in the picture below:

Generic list hierarchy

在右侧层次结构中,List<? super Number>List<? super Integer> 的子类型.是不是很困惑?

据我解释,List<? super Number>可以用任何 List<type> 表示其中 typeNumberNumber 的父类(super class).同样的逻辑适用于 List<? super Integer>还。那么如何才能List<? super Number>List<? super Integer> 的子类型?

最佳答案

这是因为List<? super Number>只能容纳Number及其父类(super class),同时 List<? super Integer>可以容纳相同的+整数。

您可以这样想:如果项目类型限制更多,那么此类项目的列表在继承层次结构中较低。你可以放一个List<? super Number>List<? super Integer> 类型的变量中,但反之则不然。

查看项目类型如何相互包含,这可能对您有帮助:

enter image description here

关于java - 通用列表<>层次结构困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365639/

相关文章:

java - 我可以知道给定的方法是否存在吗?

java - 如何按数字对包含另一张 map 的 map 进行排序

java - Java中 float 组列表到 float 组的列表

java - 使用AOP和Guice 3在第三方代码中将 `new Socket()`重新定义为 `new Bar()`?

java - convertView.getTag();创建转换错误

java - 将 double 变量从一种方法传递到另一种方法

java - 为什么可变参数应该是方法签名中的最后一个?

java - java中实例化泛型类型时出现InstantiationException

c# - 无法转换类型为 'System.Linq.OrderedEnumerable` 的对象 2[*** ]' to type ' System.Collections.Generic.IEnumerable`1[***]'

java - 如何使用来自哈希集的参数调用方法?