Java中List與數組互相轉化
阿新 • • 發佈:2019-03-22
obj arrays 原因 apple span value 大小 無法 運行時
問題的提出:
今天在完成一個小功能的時候,需要把存放在List中的數據轉化成字符串數組。
想當然地用了List
的一個方法toArray()
,它的返回值是Object[]類型,於是用強制類型轉換。代碼如下:
public static String[] getDictValueList(String type){
List<Dict> DictList = getDictList(type);
List<String> DictValue = new ArrayList<>();
for (Dict dict : DictList){
DictValue.add(dict.getLabel());
}
return (String[])DictValue.toArray();
}
結果它報錯了Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
這個錯誤看起來有點奇怪,不知道前面的L和半個方括號是什麽意思。
原因:
類型不匹配。
toArray()是一個抽象方法,返回Object[]類型,沒有泛型,無法強轉成String[]類型。要想讓它返回對應的類型可以使用它的重載方法: <T> T[] toArray(T[] a);
解決辦法:
- List轉換成為數組。(這裏的List是實體是ArrayList)
調用ArrayList
的toArray方法。public <T> T[] toArray(T[] a)
所以我以上的返回代碼修改為:return DictValue.toArray(new String[DictList.size()]);
- 數組轉換成為List
調用Arrays
的asList
方法
.public static <T> List<T> asList(T... a)
返回一個受指定數組支持的固定大小的列表。(對返回列表的更改會“直寫”到數組。)此方法同 Collection.toArray 一起,充當了基於數組的 API 與基於 collection 的 API 之間的橋梁。List stooges = Arrays.asList("Larry", "Moe", "Curly");
具體用法:String[] arr = new String[] {"1", "2"}; List list = Arrays.asList(arr);
Java中List與數組互相轉化