当前位置: 首页 > 知识库问答 >
问题:

将数组传递给已经有输入的varargs方法

邓欣可
2023-03-14

假设我们有一个varargs方法,它接受字符串。。。args作为输入。将普通字符串[]数组传递给该函数没有问题,但不幸的是,当该方法以其他字符串开头时,它不起作用:

String[] someStringArray = new String[5];
varargsMethod("hello", "world", someStringArray);

我知道简单地将静态Strings前缀到列表中并传递它是没有问题的,但是在我的特定fc情况下,我的代码的可读性会受到影响,所以如果可能的话,我希望以任何方式避免这种情况。

有可能吗?

共有3个答案

弘思聪
2023-03-14

我建议您只需使用List.add. addAll事先构造命令参数列表:

List<String> commandAndParams = new ArrayList();
commandAndParams.add("command");
commandAndParams.add("-p");
commandAndParams.addAll(pParametersList);
commandAndParams.addAll(Arrays.asList(new String[]{"-v", "-t", "-s"}));
commandAndParams.add("-o"); commandAndParams.add(outputfile);

// a varargs method would need a .toArray() cast before being called, 
// but ProcessBuilder has a List<String> constructor.
ProcessBuilder pb = new ProcessBuilder(commandAndParams);

我混合了不同的风格,让你选择最有助于理解的,但是你应该避免像那样混合它们。

我更喜欢重新创建列表,而不是将所需的元素预先添加到现有列表中,因为我认为现有列表有一个精确的含义,它通过其变量的名称来表示,并且不同于“我将提供给ProcessBuilder的命令及其参数列表”。当然,如果可以的话,您应该选择一个比commandparams更有意义的变量名。

汤枫涟
2023-03-14

你可以这样做:

varargsMethod(
    Stream.concat(Stream.of("hello", "world"),Stream.of(someStringArray))
    .toArray(String[]::new));

这是你说要避免的“预加”,但至少它是“在线”完成的,所以可读性不会像使用多个语句那样受到影响。

张森
2023-03-14

在这种情况下,我建议您使用数组作为第一个参数,而varargs作为第二个参数。

例如:

varargsMethod(String[] input, String... extras)

超负荷

varargsMethod(String... extras)
 类似资料:
  • 问题内容: 基本上我有一个ArrayList的位置: 在此之下,我调用以下方法: getMap()方法中的参数为: 我遇到的问题是我不确定如何在整个方法列表中传递该方法。 我试过了 但是getMap不接受,因为它不接受Objects []。 现在,如果我使用 它会完美地工作…但是我需要以某种方式传递所有位置…我当然可以继续添加等等,但是数组的大小会有所不同。我只是不习惯整个概念 最简单的方法是什么

  • 问题内容: 如何将整个数组传递给方法? 如何正确执行此操作? 问题答案: 你做这个: 只需将其作为其他任何变量传递即可。 在Java中,数组是通过引用传递的。

  • 嘿,伙计们,我是一个完全的初学者,在Java,我正在尝试编写一个程序,以这样的方式:油漆公司已经确定,每115平方英尺的墙壁空间,一加仑油漆和8小时的劳动将需要。 这家公司的人工费为每小时18美元。 编写一个程序,允许用户输入需要粉刷的房间数量和每加仑油漆的价格。它还应该要求每个房间有平方英尺的墙壁空间。程序应该具有返回以下数据的方法: 所需油漆的加仑数 所需劳动时数 油漆成本 人工费 喷漆作业的

  • 我有两门课:MyNumbers和MyScanner。我试图将经过验证的输入传递给calculateSum(int x,int y)方法,以便在MyScanner类中打印最终结果,但我不知道如何从MyScanner类获取用户输入,将它们传递给MyNumbers类中的validate()方法,以便calculateSum()方法执行其任务。 P.S.validate()方法应为void且无参数,但ca

  • 问题内容: 哦,我的话我是个傻瓜。 调用函数时,我只是省略了第二个和第三个参数。像个傻瓜。因为那就是我。原来愚蠢的问题如下: 这似乎是它必须做一个很平常的事,但是我无法找到相关的教程,我太无知了约,并弄明白自己。 我的文件中有一个C函数。 (您可能会猜到,我最初的参数为double 而不是void ,但无法弄清楚在Python方面该怎么做。我当然很想将其改回来,但我并不挑剔只要有效。) 我用它制作

  • 问题内容: 在SQL Server 2014中,我试图创建一个动态的WHERE子句。 我已将查询构建为字符串,但是当我尝试使用sp_executesql执行查询时,出现以下错误:提示 13您必须声明标量变量“ @desde”。 我不知道如何使sp_executesql识别输入参数。 问题答案: 代替 使用 您必须定义在动态查询中使用的参数,例如 请参考sp_executesql 否则,您可以将动态