Groovy中的以下代码将
GString
s添加到列表中:
List<String> args = [ 'cmd', "-Dopt=${value}" ]
当我用这个列表创建ProcessBuilder
时,我会得到一个ClassCastException
。将列表元素强制为正确类型的绝妙方法是什么?
或者,您可以执行:
List<String> args = [ 'cmd', "-Dopt=${value}"] as String[]
或
List<String> args = [ 'cmd', "-Dopt=${value}"]*.toString()
实际上,为什么出于兴趣而使用ProcessBuilder?Groovy添加了进行流程管理的方法,甚至在List中添加了三个execute
方法
你可以做(这是在OS X或Linux上(:
def opt = '-a'
println( [ 'ls', "$opt" ].execute( null, new File( '/tmp' ) ).text )
它打印出我的/tmp
文件夹中的文件
尝试
List<String> args = [ 'cmd', "-Dopt=${value}".toString() ]
因为后者是CCD_ 6。
我做了一个测试:
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%确定这是最好的方法。