Implement the Arrays#copyOf family

... as introduced in Java 6.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
Johannes Schindelin 2013-11-02 00:17:50 -05:00
parent 46a55bd024
commit 6a81623690
2 changed files with 81 additions and 0 deletions
classpath/java/util
test

@ -10,6 +10,8 @@
package java.util;
import java.lang.reflect.Array;
public class Arrays {
private Arrays() { }
@ -348,4 +350,76 @@ public class Arrays {
}
}
public static boolean[] copyOf(boolean[] array, int newLength) {
boolean[] result = new boolean[newLength];
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static byte[] copyOf(byte[] array, int newLength) {
byte[] result = new byte[newLength];
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static char[] copyOf(char[] array, int newLength) {
char[] result = new char[newLength];
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static double[] copyOf(double[] array, int newLength) {
double[] result = new double[newLength];
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static float[] copyOf(float[] array, int newLength) {
float[] result = new float[newLength];
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static int[] copyOf(int[] array, int newLength) {
int[] result = new int[newLength];
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static long[] copyOf(long[] array, int newLength) {
long[] result = new long[newLength];
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static short[] copyOf(short[] array, int newLength) {
short[] result = new short[newLength];
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static <T> T[] copyOf(T[] array, int newLength) {
Class<?> clazz = array.getClass().getComponentType();
T[] result = (T[])Array.newInstance(clazz, newLength);
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
public static <T, U> T[] copyOf(U[] array, int newLength,
Class<? extends T[]> newType)
{
T[] result = (T[])Array.newInstance(newType.getComponentType(), newLength);
int length = array.length > newLength ? newLength : array.length;
System.arraycopy(array, 0, result, 0, length);
return result;
}
}

@ -130,6 +130,13 @@ public class Arrays {
java.util.Arrays.hashCode((Object[])null);
}
{ String[] list = new String[] { "Hello", "World", "!" };
Object[] result = java.util.Arrays.copyOf(list, 2, Object[].class);
expect(list[1] == result[1]);
expect(result.length == 2);
expect(result.getClass().getComponentType() == Object.class);
}
testSort();
}
}