Java 将可变数量的参数转发给通过椭圆运算符接受可变数量参数的函数
简言之,我有一个函数接受可变数量的参数,另一个函数也接受可变数量的参数,我需要将方法中的所有可变参数加上一些额外的参数转发给第二个接受可变参数的方法Java 将可变数量的参数转发给通过椭圆运算符接受可变数量参数的函数,java,Java,简言之,我有一个函数接受可变数量的参数,另一个函数也接受可变数量的参数,我需要将方法中的所有可变参数加上一些额外的参数转发给第二个接受可变参数的方法 action1(new Filter1()); action2(new Filter1(), new Filter2()); public void action1(Object ... params){ actionGeneric(new Action1(), params); } public void action2(Object
action1(new Filter1());
action2(new Filter1(), new Filter2());
public void action1(Object ... params){
actionGeneric(new Action1(), params);
}
public void action2(Object ... params){
actionGeneric(new Action2(), params);
}
public void actionGeneric(Object ... params){
for (Object param : params){
if (param instanceof Action1){
// works fine
} else if (param instanceof Action2){
// works fine
} else if (param instanceof Filter1){
// never gets here
} else if (param instanceof Filter2){
// never gets here
}
}
}
所以我的问题是,我应该如何在action1/action2中转发这些参数,以便actionGeneric将它们视为Filter1/Filter2实例而不是(我猜)数组类型?如果将单个数组传递给变量参数方法,它将被视为变量参数。因此,创建一个新数组,如下所示:
Object[] newArray = new Object[params.length + 1];
newArray[0] = new Action1();
System.arraycopy(params, 0, newArray, 1, params.length);
actionGeneric(newArray);
如果将单个数组传递给变量参数方法,它将被视为变量参数。因此,创建一个新数组,如下所示:
Object[] newArray = new Object[params.length + 1];
newArray[0] = new Action1();
System.arraycopy(params, 0, newArray, 1, params.length);
actionGeneric(newArray);
在action2()
方法中,使用两个参数调用actionGeneric()
方法:newaction2()
和params
(后者是一个对象数组)。因此,从actionGeneric()
方法的角度来看,一些参数的类型是Action2
,而不是Filter1
。我认为,解决方案是在将其传递给actionGeneric()
方法之前创建一个新数组,大致如下所示
Object[] newParams = new Object[params.length + 1];
newParams[0] = new Action1();
System.arraycopy(params, 0, newParams, 1, params.length);
actionGeneric(newParams);
在action2()
方法中,使用两个参数调用actionGeneric()
方法:newaction2()
和params
(后者是一个对象数组)。因此,从actionGeneric()
方法的角度来看,一些参数的类型是Action2
,而不是Filter1
。我认为,解决方案是在将其传递给actionGeneric()
方法之前创建一个新数组,大致如下所示
Object[] newParams = new Object[params.length + 1];
newParams[0] = new Action1();
System.arraycopy(params, 0, newParams, 1, params.length);
actionGeneric(newParams);
一个解决方案是改变你的设计。使您的
Action1
和Action2
实现一个通用接口,以避免使用实例。类似于您的FilterX
,并传递与对象不同的内容。。。params
。似乎有问题-此代码应该到达“永不到达”行。是否可以通过在for循环中打印出param.getClass().getName()
来进行调试?java
函数不以函数开始。请张贴真实代码。或者这是javascript
?抱歉,这是java代码,目前正在使用多种语言,因此在其中混合了一些不应该存在的内容。解决方案的可能副本是更改您的设计。使您的Action1
和Action2
实现一个通用接口,以避免使用实例。类似于您的FilterX
,并传递与对象不同的内容。。。params
。似乎有问题-此代码应该到达“永不到达”行。是否可以通过在for循环中打印出param.getClass().getName()
来进行调试?java
函数不以函数开始。请张贴真实代码。或者这是javascript
?对不起,这是java代码,目前正在使用多种语言,所以混合了一些不应该存在的东西。可能是Jae Heon Lee的复制品打败了我。Jae Heon Lee打败了我。