0

当我使用插值字符串创建子节点时,我无法使用点符号再次访问该节点。当我尝试访问有问题的节点时,我只是得到null. children()如果我循环并寻找它,我可以获得节点,但我不应该这样做。下面的代码重复了这个问题:

// All works as expected when an interpolated string isn't used to create the child node
def rootNode = new Node(null, "root")
def childNode = new Node(rootNode, "child", [attr: "test"])
def childNodeCopy = rootNode.child[0]
println childNode.toString() // child[attributes={attr=test}; value=[]]
println childNodeCopy.toString() // child[attributes={attr=test}; value=[]]
println childNode.toString() == childNodeCopy.toString() // true

// But when an interpolated string is used the child node cannot be accessed from the root
rootNode = new Node(null, "root")
def childName = "child"
childNode = new Node(rootNode, "$childName", [attr: "test"])
childNodeCopy = rootNode.child[0]
println childNode.toString() // child[attributes={attr=test}; value=[]]
println childNodeCopy.toString() // null
println childNode.toString() == childNodeCopy.toString() // false
4

1 回答 1

1

啊,这是因为在内部,实际上Node必须将节点名称作为键存储在映射中,它只是遍历节点的名称,但是在 Java 中,它不会找到子节点,因为string.equals( groovyString )永远不会是真的

由于 Groovy 字符串不是字符串,rootNode.child因此正在返回null

作为一种解决方法,您可以执行以下操作:

childNode = new Node(rootNode, "$childName".toString(), [attr: "test"]) 
childNodeCopy = rootNode.child[0] 
于 2013-11-11T23:45:03.280 回答