为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2021-07-22 18:15:22
假设我有一个像下面这样的方法: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[])'
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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

}


查看完整回答
反对 回复 2021-07-29
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

数组具有固定结构。这意味着一旦实例化就无法扩展(或减小)其大小。

因此,要实现您的要求,您必须创建一个具有所需容量的新阵列。


作为替代方法,虽然不是最有效的方法(使用小列表就可以了),将数组转换为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); 


查看完整回答
反对 回复 2021-07-29
  • 2 回答
  • 0 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信