我只是注意到一个奇怪的行为,看这个例子:
public static void main(String[] args) {
aaa(1,2);
}
public static void aaa(int... a){
bbb(a);
ccc(a);
}
public static void bbb(int... a){
}
public static void ccc(Object... a){
}
bbb
a
是一个数组{1,2} (a = {1,2}
)
ccc
a
是数组的数组,第一个数组值为 {1,2} (a = { {1,2} }/
)
我的代码中有些地方必须将其定义为Object
。但是当然不需要第二种行为..我想要两个定义的相同行为( Object...
和 int...
将包含 { 1,2}
).我该怎么做?
首选值是值数组而不是数组数组。例如bbb
参数是可以的,而ccc
中想要的参数是{1,2}
来自类型Object
.
如果尝试做这样的事情是为了获得内部数组,我会失败:
public static void ccc(Object... a){
ArrayList<Object> list = new ArrayList<>();
if(a.getClass().isArray()){
for(Object in_obj: (Object[])obj){
list.add(in_obj);
}
}
// rest of the code..
}
错误:java.lang.ClassCastException: I cannot be cast to java.lang.Object[]
because the array is primitive.. 有解决方案吗?我不只使用 int,而是使用很多原始的(而不是原始的)..
最佳答案
感谢您的输入,我也想要信用 this线。我构建的是这样的:
private Object[] toArrayObject(Object[] array){
ArrayList<Object> list = new ArrayList<>();
for(Object obj: array){
if(obj.getClass().isArray()){
list.addAll(Arrays.asList(getArray(obj)));
} else{
list.add(obj);
}
}
return list.toArray();
}
private Object[] getArray(Object val){
Class<?>[] ARRAY_PRIMITIVE_TYPES = {
int[].class, float[].class, double[].class, boolean[].class,
byte[].class, short[].class, long[].class, char[].class
};
Class<?> valKlass = val.getClass();
Object[] outputArray = null;
for(Class<?> arrKlass : ARRAY_PRIMITIVE_TYPES){
if(valKlass.isAssignableFrom(arrKlass)){
int arrlength = Array.getLength(val);
outputArray = new Object[arrlength];
for(int i = 0; i < arrlength; ++i){
outputArray[i] = Array.get(val, i);
}
break;
}
}
if(outputArray == null) // not primitive type array
outputArray = (Object[])val;
return outputArray;
}
关于java - java 上的数组参数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19740914/