[英]Java - Sonar - Arrays should not be copied using loops
我的Java代碼:
public class TestArray {
public static void main(String[] args) {
final String[] cols = { "a", "b", "c", "d" };
List<String> columns = new ArrayList<>(4);
// for (int i = 1; i < cols.length - 1; i++) {
// columns.add(cols[i]);
// }
System.arraycopy(cols, 0, columns, 0, cols.length - 1);
for (String c : columns) {
System.out.println(c);
}
}
}
聲納說: 數組不應該使用循環復制
當有內置函數為您執行復制操作時,使用循環復制數組或數組的子集只是浪費代碼。 而是使用Arrays.copyOf將整個數組復制到另一個數組中,使用System.arraycopy僅將一個數組的子集復制到另一個數組中,並使用Arrays.asList將新列表的構造函數提供給數組。
請注意,Arrays.asList只是將Collections包裝器放在原始數組周圍,因此,如果需要一個非固定大小的List,則需要進一步的步驟。
因此,我嘗試這樣做:
System.arraycopy(cols, 1, columns, 0, cols.length -1);
我有這個錯誤:
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at com.company.TestArray.main(TestArray.java:16)
我認為我的問題來自數組不是列表
您不能使用System.arraycopy
將數據存儲在非數組中。 如文檔中所述 :
...如果以下任何一項為真,則拋出
ArrayStoreException
,並且不修改目標:
src
參數引用的對象不是數組。dest
參數引用的對象不是數組。- ...
如果cols
是引用類型的數組,則只需使用Arrays.asList
和subList
:
columns.addAll(Arrays.asList(cols).subList(1, cols.length - 1));
像這樣嗎
columns = Arrays.asList(Arrays.copyOfRange(col, 1, col.length));
或這個
columns.addAll(Arrays.asList(Arrays.copyOfRange(col, 1, col.length )));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.