我如何要求任何数组作为参数?

时间:2015-09-04 23:37:27

标签: java arrays

public void expand(???, int number) {

    array = java.util.Arrays.copyOf(array, array.length + number);

}

在" ???",我想接受任何类型的数组。解决方案是否属于通用类型?

2 个答案:

答案 0 :(得分:1)

如果通过"任何阵列"你的意思是一个对象数组(例如String[])和一个基元数组(例如int[]),然后泛型不会帮助你,你唯一的选择就是{{1并验证它是一个数组。

Object

<强>更新

但是,由于您只是想要一种方便的方法来调用public void expand(Object array, int number) { if (! array.getClass().isArray()) throw new IllegalArgumentException("Not an array"); int arrayLen = Array.getLength(array); // Sample methods for accessing array Class<?> arrayValueClass = array.getClass().getComponentType(); // E.g. int.TYPE int firstInt = Array.getInt(array, 0); // Assumes array is int[] Object firstVal = Array.get(array, 0); // Always works. Primitives are boxed } ,因此您最好的解决方案是实现10个版本的copyOf,每个版本的expand一个,如果您不喜欢#39;需要支持所有原始数组类型:

copyOf

答案 1 :(得分:0)

Integer[] array = {1,2,3};
array = expand(array, 10);
System.out.println(array.length);

public <T> T[] expand(T[] array, int number) {
    array = java.util.Arrays.copyOf(array, array.length + number);
    return array;
}