Search code examples
javamethodsargumentsvariable-length

Pass variable-length-arguments to variable-length-arguments with different sizes


Suppose I have a method like below:

public void setTask(String... args) {
    //...
}

How can I create a special version of the above method that has a fixed value for the first member of args like below?

(args[0] always has a fixed value and constructorArgs.length == args.length-1.)

public void setSpecialTask(String... constructorArgs) {
    setTask("SpecialTask", constructorArgs); // ERROR: 'setTask(java.lang.String...)' cannot be applied to '(java.lang.String, java.lang.String[])'
}

'setTask(java.lang.String...)' cannot be applied to '(java.lang.String, java.lang.String[])'


Solution

  • You can either declare a new setTask(String, String...) method or you can create an array containing the additional string:

    public void setSpecialTask(String... constructorArgs) {
      String[] args = new String[constructorArgs.length + 1);
      args[0] = "SpecialTask";
      System.arraycopy(constructorArgs, 0, args, 1, constructorArgs.length);
    
      setTask(args);
    }