java上的数组参数行为
我只是注意到一个奇怪的行为,看看这个例子:
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}
)
在ccc
{a = { {1,2} }
)
我的代码中有一些地方必须将其定义为Object
。当然,第二种行为是不可取的。。我希望两个定义具有相同的行为(无论是Object...
还是int...
都将包含{1,2}
)。我该怎么做
首选值是一个值数组,而不是一个数组和一个数组。例如bbb
参数是ok,并且ccc
中所需的参数是来自类型Object
的{1,2}
如果我尝试这样做是为了获得内部数组,我将失败:
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[]
,因为数组是基元。。有解决办法吗?我不仅使用int,而且还使用了很多primitive(而不是primitive)
# 1 楼答案
Java不会将
int
数组自动装箱到Integer
数组中。您可以做的一件事是,在ccc
中,检查a
中的每个Object
并检查它是否是int[]
,如果是,则分别处理这些int
您可以做的另一件事是首先装箱
int
数组;或者编写自己的方法来完成,或者例如apachecommons Lang提供ArrayUtils.toObject()您也可以在开始时使用
Integer
不过,如果你发现自己处于这种情况,你应该后退一步,想想你所做的是否最有意义
# 2 楼答案
谢谢你的输入,我还想信贷this线程。我构建的是:
# 3 楼答案
使用整数而不是int