我有字符串,它以用户的输入形式出现。我将String添加到一个空的groovy列表中。新列表可以打印出所需的新内容。但是当我尝试迭代新的List时,它会发出错误:
groovy.lang.MissingPropertyException: No such property: a for class: java.lang.String
我在groovyConsole中的测试如下:
def obj ="[a: 'files', b: 'filename', folder: [src: 'dir1', tgt: 'dir2']],[a: 'files2', b: 'filename2', folder: [src: 'dir3', tgt: 'dir4']]"
println obj.class.name //returns java.lang.String
//The empty List initialised
def l = []
println l.class.name
//Adds the string to the List l
l << obj
println l.class.name //returns java.util.ArrayList as expected
//trying to iterate over the List l, as so throws the exception "No such property: a for class: java.lang.String"
l.each { k ->
println k.a
println k.folder.src
}
注意:println l
,返回以下
[[a: 'files', b: 'filename', folder: [src: 'dir1', tgt: 'dir2']],[a: 'files2', b: 'filename2', folder: [src: 'dir3', tgt: 'dir4']]]
答案 0 :(得分:2)
它不会以这种方式工作。您无法引用String
,就好像它是Map
或其他具有属性a
的对象。您需要做的是将obj
定义为Map
或将其定义为String
,并使用Eval
进行评估以进行进一步处理。以下两个例子都有:
def obj = Eval.me("[[a: 'files', b: 'filename', folder: [src: 'dir1', tgt: 'dir2']],[a: 'files2', b: 'filename2', folder: [src: 'dir3', tgt: 'dir4']]]")
def l = []
l << obj
l.each { k ->
println k.a
println k.folder.src
}
obj = [[a: 'files', b: 'filename', folder: [src: 'dir1', tgt: 'dir2']],[a: 'files2', b: 'filename2', folder: [src: 'dir3', tgt: 'dir4']]]
l.removeAll()
l << obj
l.each { k ->
println k.a
println k.folder.src
}