我有一个关于将子类列表分配给超类列表的基本问题.
所以我有以下内容:
Class B extends A;
List <B> bList = new ArrayList<B>();
List <A> aList = bList;
Run Code Online (Sandbox Code Playgroud)
为什么最后一次分配失败?对不起新手问题
声明类型A的项目列表时,只能在列表中添加或删除类型A的项目.如果需要包含A的子类,请使用通用通配符? extends A来表示.因此,您的代码应该是:
List <? extends A> aList = bList;
Run Code Online (Sandbox Code Playgroud)
为了解释这一点,让我用"整数"替换"B",用"数字"替换"A".这只是为了让它更容易解释.
Class Integer extends Number;
List <Integer> iList = new ArrayList<Integer>();
List <Number> nList = iList // will fail
Run Code Online (Sandbox Code Playgroud)
这会失败的原因是因为nList可以取任何数字 - 它可以取整数,它可以取Double,或者就此而言任何Number的子类.但是,对于iList,情况并非如此.您不能将Double添加到iList,因为它只接受Integer及其子类.希望这有助于向您解释.
| 归档时间: |
|
| 查看次数: |
8347 次 |
| 最近记录: |