簡體   English   中英

Java-聲納-不應使用循環復制數組

[英]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.asListsubList

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM