![](/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.