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[]
)而不是任意数量的字符串来应用错误的参数类型。感谢您的详细回答。感谢您的详细回答。