【发布时间】:2013-09-04 16:42:21
【问题描述】:
java.util.ArrayList 的实现实现了List 并扩展了AbstractList。但是在 java 文档中你可以看到 AbstractList 已经实现了 List。那么实现List和扩展AbstractList不是多余的吗?
我的第二个问题
请看下面的代码:
String str = "1,2,3,4,5,6,7,8,9,10";
String[] stra = str.split(",");
List<String> a = Arrays.asList(stra);
Arrays 类的Arrays.asList() 方法包含它自己的ArrayList 实现。但是这个只是扩展了 AbstractList 而没有实现 List。但是上面的代码可以编译。
但是当代码修改为如下
String str = "1,2,3,4,5,6,7,8,9,10";
String[] stra = str.split(",");
java.util.ArrayList<String> a = Arrays.asList(stra);
我收到一个错误:cannot convert form List<String> to ArrayList<String>
这背后的原因是什么?
EDITArrays.asList() 确实返回了它自己的 ArrayList 实现。签出this。
【问题讨论】:
-
第一个问题的答案是肯定的,但是java就是这样
-
Arrays#asList不返回ArrayList。 -
您不能将一个类分配给另一个实现相同接口的类,但您可以将它们分配给该接口。
-
@MarounMaroun :请参阅编辑。
-
@tommycake50 - 这个答案不正确。事实上,明确实施
List是有充分理由的。请参阅@Pshemo 的回答。