Java 将变长参数传递给不同大小的变长参数

Java 将变长参数传递给不同大小的变长参数,java,methods,arguments,variable-length,Java,Methods,Arguments,Variable Length,假设我有一个如下的方法: public void setTask(String... args) { //... } 如何创建上述方法的特殊版本,该方法对args的第一个成员具有固定值,如下面所示 (args[0]始终有一个固定值,并且constructorArgs.length==args.length-1) “setTask(java.lang.String…)无法应用于“(java.lang.String,java.lang.String[])” 您可以声明一个新的setTask

假设我有一个如下的方法:

public void setTask(String... args) {
    //...
}
如何创建上述方法的特殊版本,该方法对
args
的第一个成员具有固定值,如下面所示

args[0]
始终有一个固定值,并且
constructorArgs.length==args.length-1

“setTask(java.lang.String…)无法应用于“(java.lang.String,java.lang.String[])”


您可以声明一个新的
setTask(String,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);
}

您可以声明一个新的
setTask(String,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);
}

数组具有固定的结构。这意味着一旦实例化,就不能扩展(或缩小)其大小。
所以,为了满足您的需求,您必须创建一个具有所需容量的新阵列

作为替代方法,虽然不是最有效的方法(使用小列表也可以),将数组转换为
列表
,在中添加缺少的元素并将其转换回数组:

public void setSpecialTask(String... constructorArgs) {
    String[] array = Arrays.asList("SpecialTask", constructorArgs)
                           .toArray(new String[constructorArgs.length+1]);
    setTask(array);    
}
或者在Java 8中既简单又高效(不需要任何中介
列表
):

String[] array = Stream.of("SpecialTask", constructorArgs)
                       .toArray(String[]::new);
setTask("SpecialTask", array); 

数组具有固定的结构。这意味着一旦实例化,就不能扩展(或缩小)其大小。
所以,为了满足您的需求,您必须创建一个具有所需容量的新阵列

作为替代方法,虽然不是最有效的方法(使用小列表也可以),将数组转换为
列表
,在中添加缺少的元素并将其转换回数组:

public void setSpecialTask(String... constructorArgs) {
    String[] array = Arrays.asList("SpecialTask", constructorArgs)
                           .toArray(new String[constructorArgs.length+1]);
    setTask(array);    
}
或者在Java 8中既简单又高效(不需要任何中介
列表
):

String[] array = Stream.of("SpecialTask", constructorArgs)
                       .toArray(String[]::new);
setTask("SpecialTask", array); 

块引号是您的错误消息吗?如果是,则通过放置一个
字符串数组(
字符串[]
)而不是任意数量的
字符串
来应用错误的参数类型。块引号是错误消息吗?如果是,则通过放置一个
字符串数组(
String[]
)而不是任意数量的
字符串来应用错误的参数类型。感谢您的详细回答。感谢您的详细回答。