== Why is this an issue? The JDK provides a set of built-in methods to copy the contents of an array into another array. Using a loop to perform the same operation is less clear, more verbose and should be avoided. === Exceptions The rule detects only the most idiomatic patterns, it will not consider loops with non-trivial control flow. For example, loops that copy array elements conditionally are ignored. == How to fix it You can use: * `Arrays.copyOf` to copy an entire array into another array * `System.arraycopy` to copy only a subset of an array into another array * `Arrays.asList` to create a new list with the contents of the array * `Collections.addAll` to add the elements of a collection into another collection Note that `Arrays.asList` returns a fixed-size `List`, so further steps are required if a non-fixed-size `List` is needed. === Code examples ==== Noncompliant code example [source,java,diff-id=1,diff-type=noncompliant] ---- public void copyArray(String[] source){ String[] array = new String[source.length]; for (int i = 0; i < source.length; i++) { array[i] = source[i]; // Noncompliant } } public void copyList(List source) { List list = new ArrayList<>(); for (String s : source) { list.add(s); // Noncompliant } } ---- ==== Compliant solution [source,java,diff-id=1,diff-type=compliant] ---- public void copyArray(String[] source){ String[] array = Arrays.copyOf(source, source.length); } public void copyList(List source) { List list = new ArrayList<>(); Collections.addAll(list, source); } ---- [source,java] ---- public void makeCopiesConditional(int[] source) { int[] dest = new int[source.length]; for (int i = 0; i < source.length; i++) { if (source[i] > 10) { dest[i] = source[i]; // Compliant, since the array elements are conditionally copied to the dest array } } } ---- == Resources === Documentation * https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#copyOf-T:A-int-:~:text=1.6-,copyOf,-public%20static%C2%A0byte[docs.oracle] - Arrays.copyOf documentation * https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#asList-T...-:~:text=1.6-,asList,-%40SafeVarargs%0Apublic%20static[docs.oracle] - Arrays.asList documentation * https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#arraycopy-java.lang.Object-int-java.lang.Object-int-int-:~:text=1.5-,arraycopy,-public%20static%C2%A0void[docs.oracle] - System.arraycopy documentation ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Use "Arrays.copyOf", "Arrays.asList", "Collections.addAll" or "System.arraycopy" instead. ''' == Comments And Links (visible only on this page) === on 23 Jul 2015, 07:14:19 Nicolas Peru wrote: I slightly changed the title to make it clearer. Please double check. === on 23 Jul 2015, 09:06:29 Ann Campbell wrote: Thanks [~nicolas.peru]. endif::env-github,rspecator-view[]