Ruby で利用できることがわかりましたが、Python で行ったことから認識しています。「スプラット」演算子。簡単に言えば、「splat」オペレーターの機能を模倣して、現在の自分を達成するためのより簡単な方法があるかどうか疑問に思っています。
非常によく似たメソッドがいくつかあり、いくつかの小さなことを除いてすべて同じことをしていることに気付いたので、残りが呼び出すことができる中心的なメソッドを作成しました。メソッドのシグネチャは次のとおりです。
private String callScript(String scriptLocation, String... extraArgs) throws Exception {
少なくとも 1 つの引数 ( 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
追加できることを理解していますand )finalArgs
addAll
Arrays.asList()
(そして、はい、可変引数と組み合わせた特定の引数を返すことで、回避策を効果的に達成する関数を作成できることを知っています)
ですから、これらの最後の 3 つのステートメント以外に、これを達成できるものはあるのでしょうか?