我编写了一个将变量参数作为对象的函数。
当我传入一个大小为1的整数数组,例如{9}时,它将args [0] as和int array []视为int,因此 valueOf 不会产生9. < / p>
但是如果传入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;
}
编辑刚看了一眼我实际上是在两个整体场景中以不同方式传递它们,一个接一个而不是数组,抱歉。
当我传入一个int数组时,为什么不将方法(Object ... args)拆分成一个对象数组,就像方法(int ... args)所发生的那样
所以现在要获取字符串值,我必须单独转换数组类型,例如。 for int [],double []
if (args[0] instanceof int[]){
argsStrings[0] = String.valueOf(((int[])args[0])[0]);
有没有办法为任何类型的对象编写它,因为这会导致崩溃
argsStrings[0] = String.valueOf(((Object[])args[0])[0]);
java.lang.ClassCastException:int []无法强制转换为java.lang.Object []
答案 0 :(得分:2)
如果要传递数组并将每个项目视为方法的'args'参数的单独项,则需要将数组转换为Object []。例如:如果你传入如下所示的整数数组,那就可以做你想做的事。
whereArgs((Object[])(new Integer[]{1, 2}))
原因是编译源时var-arg方法实际上被数组替换。调用方法的所有位置都转换为数组。如果要传递数组以使每个项成为单独的参数..那么您需要使用正确的数组类型。在你的场景中,这将是Object []。这让编译器知道它可以按原样保留方法调用(不将参数放在新对象[]中)