Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将可变数量的参数转发给通过椭圆运算符接受可变数量参数的函数_Java - Fatal编程技术网

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打败了我。