Java 对象在数组中传递的变量参数不一致
我编写了一个将变量参数作为对象的函数 当我传入一个大小为1的int数组时,例如{9},它将args[0]视为int,而int数组[]则不是int,因此的值不会产生9 但如果传入一个包含2个或更多整数的数组,例如{9,11},则它将args[0]视为9,将args[1]视为11。 为什么它的行为会有所不同 注意,它是为Android编写的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
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}))