Создать список строк в Groovy - PullRequest
8 голосов
/ 06 июля 2011

Следующий код в Groovy добавляет GString s в список:

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

Когда я создаю ProcessBuilder с этим списком, я получаю ClassCastException. Какой отличный способ привести элементы списка к правильному типу?

Ответы [ 3 ]

17 голосов
/ 06 июля 2011

Или вы можете сделать:

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

или

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

на самом деле, почему вы используете ProcessBuilder из интереса? Groovy добавляет способы управления процессами и даже добавляет три execute метода в список

Вы можете сделать (это на OS X или Linux):

def opt = '-a'

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

, который распечатывает файлы в моей папке /tmp

2 голосов
/ 06 июля 2011

Попробуйте

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

, поскольку более поздним является GString.

1 голос
/ 06 июля 2011

Я сделал тест:

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%, что это лучший способ сделать это.

...