Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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_Arguments_Variadic Functions - Fatal编程技术网

Java 对象在数组中传递的变量参数不一致

Java 对象在数组中传递的变量参数不一致,java,arguments,variadic-functions,Java,Arguments,Variadic Functions,我编写了一个将变量参数作为对象的函数 当我传入一个大小为1的int数组时,例如{9},它将args[0]视为int,而int数组[]则不是int,因此的值不会产生9 但如果传入一个包含2个或更多整数的数组,例如{9,11},则它将args[0]视为9,将args[1]视为11。 为什么它的行为会有所不同 注意,它是为Android编写的 protected String[] whereArgs(Object...args) { String[] argsStrings = new Str

我编写了一个将变量参数作为对象的函数

当我传入一个大小为1的int数组时,例如{9},它将args[0]视为int,而int数组[]则不是int,因此的值不会产生9

但如果传入一个包含2个或更多整数的数组,例如{9,11},则它将args[0]视为9,将args[1]视为11。 为什么它的行为会有所不同

注意,它是为Android编写的

protected String[] whereArgs(Object...args) {
    String[] argsStrings = new String[args.length];
    for (int i = 0; i < args.length; i++) {
        if (args[i] instanceof String){
            argsStrings[i] = (String)args[i];
        } else {
            argsStrings[i] = String.valueOf(args[i]);   
        }
    }
    return argsStrings;
}
有没有办法为任何类型的对象编写它,因为这会导致崩溃

argsStrings[0] = String.valueOf(((Object[])args[0])[0]);

java.lang.ClassCastException:int[]不能强制转换为java.lang.Object[]

如果要传递数组并将每个项作为方法的“args”参数的单独项处理。。您需要将数组强制转换为对象[]。e、 g:如果你像下面这样传入你的整数数组,它会做你想做的事情

whereArgs((Object[])(new Integer[]{1, 2}))

原因是当编译源代码时,var arg方法实际上被数组替换。调用方法的所有位置都转换为数组。如果要传递一个数组,使每个项成为一个单独的参数。。然后需要使用正确的数组类型。在您的场景中,这将是对象[]。这让编译器知道它可以保持方法调用的原样(而不将参数放入新对象[])

如何传递大小为1的数组?当我调用
wherergs(array)
时,其中
array
int[]
,然后
args
内部,其中rgs
是一个数组,它包含作为
args[0]
传递的数组,而不管
array
有多长。您使用的是什么版本的Java?发布完整的代码,包括对该方法的调用。为了确保,您是以与1 int数组类似的方式传递2 int数组,还是只调用wherergs(9,11)?因为数组本身就是一个对象,所以编译器不知道您实际上是想传入数组对象还是数组中的值。
whereArgs((Object[])(new Integer[]{1, 2}))