![](/img/trans.png)
[英]How can I convert an array to a list without using Arrays.asList() method or Java List Interface
[英]Why I am able to use Arrays.asList method with an object declared for interface, List, but not when it is declared as an instance of class ArrayList?
//Splitting a string and passing it to a String Array
String[] b1 = a1.split("");
//The Following throws a compile-time error
ArrayList<String> arrayList1 = new ArrayList<String>();
arrayList1 = Arrays.asList(b1);
//The following works
List<String> arrayList1 = new ArrayList<String>();
arrayList1 = Arrays.asList(b1);
我想知道为什么第一种方法会引发错误而第二种方法效果很好? ArrayList
实现了List
接口,所以它应该可以很好地工作。
ArrayList
实现了List
接口,所以它应该可以很好地工作。
不,这不是它的工作原理。 如果某些东西返回接口的实现,您可以将其分配给声明为该接口的对象,而不是相反。
这就是你在做的时候
List<String> arrayList1 = new ArrayList<String>();
这是完全合法的。
但是如果asList
返回的是 List 而不是 ArrayList 的东西(这就是这里发生的事情)怎么办? 您会收到错误消息,因为您将不是ArrayList
(并且不是从它下降)的内容分配给ArrayList
。
另请注意,只要您执行arrayList1 = Arrays.asList(b1);
在第二个测试中,您将新的ArrayList
分配给arrayList1
的事实完全无关紧要,因为您将在下一行覆盖它,因此arrayList1
只是一个List
,正如声明的那样。
Java 是静态类型的,当你说一个变量是一个String
你不能给它分配一个int
。 你的例子也是如此。 当您将arrayList1
声明为ArrayList<String>
您不能为其分配List<String>
。 因为您不能确定从Arrays.asList()
返回的值真的是java.util.ArrayList
一个实例。
还要注意存在两个名为ArrayList
java 类。 一个来自java.util
,另一个来自java.util.Arrays
。 前者是public
,后者在Arrays
类中是private
的
Arrays.asList(b1) 返回一个 java.util.Arrays.ArrayList 类型的对象,它是 Arrays 中的一个嵌套类。
换句话说,您的问题是为什么无法将类型为 java.util.Arrays.ArrayList 的 b1 转换为类型为 java.util.ArrayList 的 arrayList1 :这是两种完全不同的类型,根本不相关。
如果你需要一个 java.util.ArrayList,你可以创建一个副本:
ArrayList arrayList1 = new ArrayList<>(Arrays.asList(b1));
问候
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.