gpt4 book ai didi

java - 有没有比模仿 splat 运算符更简单的替代方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:26 25 4
gpt4 key购买 nike

我发现它在 Ruby 中可用,但我从我在 Python 中所做的事情中认识到它; “splat”运算符。长话短说,我想知道是否有更简单的方法来完成我目前的工作,模仿“splat”运算符所做的事情。

我做了一个其他人可以调用的核心方法,因为我意识到我有几个非常相似的方法,除了一些小事情外,它们都在做同样的事情。这是方法签名:

private String callScript(String scriptLocation, String... extraArgs) throws Exception {

我想要求至少一个参数(scriptLocation),然后允许任意数量的额外参数。我最终做的是创建一个 ProcessBuilder .我的愿望是做这样的事情:

ProcessBuilder pb = new ProcessBuilder("something", scriptLocation, /* extraArgs */);

当然,ProcessBuilder构造函数只接受如下内容:

  • List<String>
  • String[]
  • String...

所以我的方法显然行不通。

据我所知,我目前的解决方法是:

List<String> finalArgs = new ArrayList<String>();
finalArgs.add("something");
finalArgs.add(scriptLocation);
finalArgs.addAll(Arrays.asList(extraArgs));
ProcessBuilder pb = new ProcessBuilder(finalArgs);

(是的,我知道我不必使用 List 并且可以制作一个 String[] )

(是的,我知道我可以遍历 extraArgs 并将它们分别添加到 finalArgs,而不必使用 addAllArrays.asList())

(是的,我知道我可以创建一个函数,通过返回某些参数和可变参数来有效地完成我的解决方法)

所以我想除了这最后三个陈述之外,还有什么可以实现这一目标吗?

最佳答案

这取决于您对更简单的定义,但您可以使用构建器模式编写一个类:

public class MyProcessBuilder {
List<String> args;

MyProcessBuilder( String text, String location ) {
args = new ArrayList<String>();
args.add( text );
args.add( location );
}

MyProcessBuilder arg( String arg ) {
args.add( arg );
return this;
}

MyProcessBuilder args( String... args ) {
this.args.addAll( Arrays.asList( args ) );
return this;
}

public ProcessBuilder go() {
return new ProcessBuilder( args );
}

public static MyProcessBuilder callScript( String location ) {
return new MyProcessBuilder( "something", location );
}

public static void main( String[] args ) {
callScript( "/tmp/bla" ).arg( "something else" ).arg( "more" ).go();
}
}

关于java - 有没有比模仿 splat 运算符更简单的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17893026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com