Need to make this generic:
public static String[] tail(String[] array) {
    String[] result = new String[array.length - 1];
    System.arraycopy(array, 1, result, 0, result.length);
    return result;
}
Such that:
assertArrayEquals(new Integer[]{2, 3}, tail(new Integer[]{1, 2, 3}));
assertArrayEquals(new String[]{"B", "C"}, tail(new String[]{"A", "B", "C"}));
assertArrayEquals(new String[]{"C"}, tail(tail(new String[]{"A", "B", "C"})));
assertArrayEquals(new String[]{}, tail(new String[]{"A"}).length);
And such that tail(new String[0]) is illegal.
I can't find anything on SO for tail on array, just tail of Lists etc, but I want to use in the context of variable length argument lists without converting the array to a List.
Example usage of tail with variable length argument:
public static File file(String root, String... parts) {
    return file(new File(root), parts);
}
public static File file(File root, String... parts) {
    if (parts.length == 0)
        return root;
    return file(new File(root, parts[0]), tail(parts));
}
