假设我有如下方法:
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>oracle</vendor>
</provides>
<configuration>
<jdkHome>C:\Program Files\Java\jdk1.8.0_172</jdkHome>
</configuration>
</toolchain>
如何创建上述方法的特殊版本,使其对public void setTask(String... args) {
//...
}
的第一个成员具有固定值,如下所示?
({args
始终具有固定值和 args[0]
。)
constructorArgs.length == args.length-1
'setTask(java.lang.String ...)'无法应用于'(java.lang.String,java.lang.String [])'
答案 0 :(得分:1)
您可以声明一个新的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);
}
答案 1 :(得分:1)
数组具有固定的结构。这意味着您一旦实例化就无法扩展(或减小)其大小。
因此,要满足您的要求,您必须创建一个具有所需容量的新阵列。
作为一种替代方法(虽然不是最有效的方法)(可以使用较小的列表),将数组转换为List
,在其中添加缺少的元素,然后将其转换回数组:
public void setSpecialTask(String... constructorArgs) {
String[] array = Arrays.asList("SpecialTask", constructorArgs)
.toArray(new String[constructorArgs.length+1]);
setTask(array);
}
或者在Java 8中既简单又有效(不需要任何中介List
):
String[] array = Stream.of("SpecialTask", constructorArgs)
.toArray(String[]::new);
setTask("SpecialTask", array);