9

Groovy の次のコードはGString、リストに s を追加します。

List<String> args = [ 'cmd', "-Dopt=${value}" ]

ProcessBuilderこのリストでを作成すると、 が得られますClassCastException。リスト要素を正しい型に強制するグルーヴィーな方法は何ですか?

4

3 に答える 3

18

または、次のことができます。

List<String> args = [ 'cmd', "-Dopt=${value}"] as String[]

また

List<String> args = [ 'cmd', "-Dopt=${value}"]*.toString()

実際、なぜ ProcessBuilder を興味深く使用しているのですか? Groovy はプロセス管理を行う方法を追加し、さらにexecute List に 3 つのメソッドを追加します

次のことができます (これは OS X または Linux 上にあります):

def opt = '-a'

println( [ 'ls', "$opt" ].execute( null, new File( '/tmp' ) ).text )

/tmp私のフォルダ内のファイルを印刷します

于 2011-07-06T07:23:52.250 に答える
2

試す

List<String> args = [ 'cmd', "-Dopt=${value}".toString() ]

後者はGString

于 2011-07-06T07:20:41.453 に答える
1

私はテストをしました:

def value = "abc"
List<String> args = [ 'cmd', "-Dopt=${value}"];

System.out.println (args.getClass());

System.out.println (args.get(0).getClass());
System.out.println (args.get(1).getClass());

出力は次のとおりです。

class java.util.ArrayList
class java.lang.String
class org.codehaus.groovy.runtime.GStringImpl

コードを少し変更して次のようにします。

def value = "abc"
List<String> args = [ 'cmd', "-Dopt=${value}".toString()];

System.out.println (args.getClass());

System.out.println (args.get(0).getClass());
System.out.println (args.get(1).getClass());

これを生成しました:

class java.util.ArrayList
class java.lang.String
class java.lang.String

トリックを行う必要がありますが、これが最善の方法であるかどうかは100%わかりません。

于 2011-07-06T07:21:54.870 に答える