Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何要求任何数组作为参数?_Java_Arrays - Fatal编程技术网

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

Java 我如何要求任何数组作为参数?,java,arrays,Java,Arrays,在“?”中,我希望接受任何数组,而不考虑类型。解决方案是否存在于泛型类型中?Integer[]array={1,2,3}; public void expand(???, int number) { array = java.util.Arrays.copyOf(array, array.length + number); } 数组=展开(数组,10); System.out.println(数组.长度); 公共T[]扩展(T[]数组,整数){ array=java.util.Ar

在“?”中,我希望接受任何数组,而不考虑类型。解决方案是否存在于泛型类型中?

Integer[]array={1,2,3};
public void expand(???, int number) {

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

}
数组=展开(数组,10); System.out.println(数组.长度); 公共T[]扩展(T[]数组,整数){ array=java.util.Arrays.copyOf(array,array.length+number); 返回数组; }
如果“任意数组”既指对象数组(例如
字符串[]
)又指原语数组(例如
int[]
),那么泛型对您没有帮助,您唯一的选择就是获取
对象
,并验证它是数组

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;
}

这取决于你想做什么。数组通常不能很好地处理泛型,因为您无法分配泛型数组。但是,您可以在
Array
上使用一些静态方法来实例化这样的数组。该方法的唯一目的是获取数组并使用copyOf增加其长度。我以前使用过copyOf和由我自己创建的对象生成的数组,所以我知道copyOf可以接受任何数组,而不管类型如何。我希望这个扩展方法具有同样的灵活性。如果它所做的只是调用
copyOf
,为什么调用方不能这样做?顺便说一句:
copyOf
是10种不同的方法。@Andreas我知道。从参数的类型中选择正确的副本。但我也看到了新创建类型的复制工作。此外,这种方法是为了方便,或者至少是为了懒惰。@SusuKacangSoya仅供参考:如果您不使用答案更新问题,您可以通过单击复选标记将相应的答案标记为已接受。如果你最终自己解决它,你就回答自己的问题并接受它。没关系。你用的是“整数”,而我用的是“整数”。现在我已经切换到整数了,它可以工作了。非常感谢。我刚刚了解到,基本类型不算作对象。是的,这就是我的意思。非常感谢。
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
}
public <T> T[] expand(T[] array, int number) {
    return Arrays.copyOf(array, array.length + number);
}
public int[] expand(int[] array, int number) {
    return Arrays.copyOf(array, array.length + number);
}
public double[] expand(double[] array, int number) {
    return Arrays.copyOf(array, array.length + number);
}
// and so on...