当前位置: 首页 > 知识库问答 >
问题:

为什么arraylist类在扩展AbstractList的同时实现List?

璩俊雅
2023-03-14

java.util.ArrayList的实现实现了List以及扩展了AbstractList。但是在Java文档中,您可以看到AbstractList已经实现了List。那么在扩展AbstractList的同时实现List会不会是多余的呢?
我的第二个问题

请看一下下面的代码:

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);

我得到一个错误:无法将表单列表 转换为数组列表
这背后的原因是什么?
edit
arrays.aslist()确实返回自己的ArrayList实现。看看这个。

共有1个答案

叶卓君
2023-03-14

对于您的第一个问题,看看为什么ArrayList有“Implements List”?

回答你的第二个问题

java.util.ArrayList<String> a = Arrays.asList(stra);

正如您提到的arrays.aslist返回它自己的AbstractList实现,不幸的是,这个代码的创建者也将这个类命名为ArrayList。现在,因为我们不能水平转换,而只能垂直转换返回的数组列表,所以不能转换为java.util.ArrayList,而只能转换为java.util.AbstractList或它的超级类型,如java.util.list,这就是您的第一个代码示例工作的原因。

 类似资料:
  • 问题内容: 工具的实现以及扩展。但是在Java文档中,您可以看到AbstractList已经实现了List。那么实现List以及扩展AbstractList是否不是多余的? 我的第二个问题, 请看下面的代码: Arrays类的方法包含其自己的ArrayList实现。但这仅扩展AbstractList而未实现List。但是上面的代码可以编译。 但是将代码修改为以下内容时 我收到一个错误: 这是什么原

  • 问题内容: 为什么必须始终在类声明之后编写?例如: 为什么不能这样: 后者会产生编译时错误。 问题答案: 当Java编译器将类转换为字节码时,它必须首先查找父类。这是因为类的基础实现是指向父类的字节码-包含相关的方法和字段。然后,它添加指向子类函数代码的指针-其中一些由’implements’关键字强制执行。 因为父类必须是可编译的,所以如果编译器预先知道该类是什么,则会更容易。此外,您只能扩展一

  • 在Java,你可以做这样的事情: 在Kotlin有可能做同样的事情吗?假设是抽象的,并且不实现

  • 问题内容: 我试图找出扩展Thread类的可能的优点是什么? 这是我描述的另一个问题的一部分:在Java中有两种创建线程的方法 从Thread类扩展 实现可运行的接口 如此处所述,使用可运行接口有许多好处。我的问题是从Thread类扩展的优点是什么?我想到的唯一好处是可以从Thread类扩展,并且可以称其为ThreadExtended类。然后,他/她可以在ThreadExtended中添加更多功能

  • 我试图找出扩展Thread类的可能优势是什么? null

  • 我正在学习一本书,即“.NET域驱动的C#设计”。 问题基于如下类图所示的场景: 图:http://screencast.com/t/a9uuljvw0 现在,如果我用ICompanyRepository变量comrep调用Add()函数... 然后调用RepositoryBase类(它是CompanyRepository的父类)中的Add()函数。 我的问题是:在(抽象基)类“repositor