2017-05-26 44 views
0

groovy的新手,而不是java爱好者。在我的jenkinsfile中,我遇到了一个我认为很简单的问题。将数组设置为groovy中的变量

SURL = new String[3] 
for (int i = 0; i < 3; i++) 
{ 
    url="value" 
    SURL[i]="${url}" 
} 

好像在这个简单的例子中SURL [0]到SURL [2]将被设置为“value”。我得到的错误:

java.lang.ArrayStoreException: org.codehaus.groovy.runtime.GStringImpl 

任何帮助表示赞赏。谢谢!

+0

Jenkins管道不是一个真正的普通groovy-你得到的错误是与管道行为 – Jayan

+0

有关,因为@doelleri说你试图将GString分配给一个字符串变量,而实际上你不需要根据你的代码使用GString 。 – dsharew

回答

3

这似乎是一个非常人为的例子,我不知道你真的想做什么。

如果url已经是String为什么不直接将其添加到SURL?将它放在"${}"中会给你一个GString

使用静态类型的String数组并不是很Groovy,只是使用一个列表。

def SURL = [] 
3.times { 
    SURL << url 
} 

这个例子使用了重载<<操作者附加到列表中。

1

端了它设置为一个像这样的字符串:

SURL[i]="${url}" as String 
为什么它的运作这样

仍然不确定。也许认为这是一个对象?

2

如果你想使它正确,考虑明确定义数组类型。取而代之的

def SURL = new String[3] 
SURL[ 0 ] = "-- $a" // << here comes ArrayStoreException: org.codehaus.groovy.runtime.GStringImpl 

String[] SURL = new String[3] 
SURL[ 0 ] = "-- $a" 

然后运行平稳和Groovy可以正常发件箱中GStringString