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);
我得到一个错误:无法将表单列表
这背后的原因是什么?
editarrays.aslist()
确实返回自己的ArrayList实现。看看这个。
对于您的第一个问题,看看为什么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