|
21 | 21 |
|
22 | 22 | import java.lang.reflect.Array; |
23 | 23 |
|
24 | | -public class ArrayCloner extends AbstractCloner<Object[]> { |
| 24 | +public class ArrayCloner extends AbstractCloner<Object> { |
25 | 25 |
|
26 | 26 | ArrayCloner(CopyBuilder builder) { |
27 | 27 | super(builder); |
28 | 28 | } |
29 | 29 |
|
30 | 30 | @Override |
31 | | - public Object[] copy(Object[] src, Object[] dest, boolean shallowCopy) { |
32 | | - if (shallowCopy || src.getClass().getComponentType().isPrimitive()) { |
33 | | - System.arraycopy(src, 0, dest, 0, src.length); |
34 | | - } else { |
35 | | - for (int i = 0; i < src.length; i++) { |
36 | | - dest[i] = deepCopy(src[i]); |
| 31 | + public Object copy(Object src, Object dest, boolean shallowCopy) { |
| 32 | + if (src instanceof Object[] srcArray && dest instanceof Object[] destArray) { |
| 33 | + if (shallowCopy) { |
| 34 | + System.arraycopy(srcArray, 0, destArray, 0, srcArray.length); |
| 35 | + } else { |
| 36 | + for (int i = 0; i < srcArray.length; i++) { |
| 37 | + destArray[i] = deepCopy(srcArray[i]); |
| 38 | + } |
37 | 39 | } |
| 40 | + } else { |
| 41 | + System.arraycopy(src, 0, dest, 0, Array.getLength(src)); |
38 | 42 | } |
39 | 43 |
|
40 | 44 | return dest; |
41 | 45 | } |
42 | 46 |
|
43 | 47 | @Override |
44 | | - public Object[] newInstance(Object[] object, boolean shallowCopy) { |
45 | | - return (Object[]) Array.newInstance(object.getClass().getComponentType(), object.length); |
| 48 | + public Object newInstance(Object object, boolean shallowCopy) { |
| 49 | + return Array.newInstance(object.getClass().getComponentType(), Array.getLength(object)); |
46 | 50 | } |
47 | 51 | } |
0 commit comments