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

假设我有一个像下面这样的方法:


public void setTask(String... args) {

    //...

}

如何创建上述方法的特殊版本,该版本对args下面的第一个成员具有固定值?


(args[0]总是有一个固定值和 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...)' 不能应用于 '(java.lang.String, java.lang.String[])'


慕尼黑5688855
浏览 195回答 2
2回答

潇潇雨雨

您可以声明一个新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);}

一只萌萌小番薯

数组具有固定结构。这意味着一旦实例化就无法扩展(或减小)其大小。因此,要实现您的要求,您必须创建一个具有所需容量的新阵列。作为替代方法,虽然不是最有效的方法(使用小列表就可以了),将数组转换为List,添加缺少的元素并将其转换回数组:public void setSpecialTask(String... constructorArgs) {    String[] array = Arrays.asList("SpecialTask", constructorArgs)                           .toArray(new String[constructorArgs.length+1]);    setTask(array);    }或者List在 Java 8 中既简单又高效(不需要任何中介):String[] array = Stream.of("SpecialTask", constructorArgs)                       .toArray(String[]::new);setTask("SpecialTask", array); 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java