我是这个groovy脚本的新手,因为我需要在升级了java&groovy随后面临groovy语法的问题。在java7中,它没有任何问题,但在java8中面临以下错误。
当我试图找到以下特定的标签元素时,出现了以下错误:
def tradeString = msg."**".find{it.name() == "m__tradeString"}
groovy.lang.MissingMethodException: No signature of method: java.lang.String.name() is applicable for argument types: () values: []
Possible solutions: take(int), take(int), any(), any(groovy.lang.Closure), wait(), dump()
注意:在某些地方name((方法有效,但在其他地方则面临此错误
请帮我一下。
提前谢谢。
当我使用与方法同名的变量时,我遇到了这种情况。示例:一个带有sshCommand字符串参数的函数,我在其中调用了:sshCommand remote: remote, command: fullCommand
(fullCommand是sshCommand,我添加了一些标志(。所以我有一个字符串,然后使用这个方法,那不是字符串,这就给出了错误。
在评论中讨论后。。
现在,我看到您使用groovy.util.Node
对象迭代集合,并且调用it.name()
似乎对它们有效。
但从您问题中最初的错误消息中,我也看到了String对象。因此,您可能至少有两种不同的类型(String和Node(。你必须处理好这件事。
def tradeString = msg."**".find{
String expected = 'm__tradeString'
String actual = it instanceof groovy.util.Node ? it.name() : it
actual == expected
}
这个代码当然可以缩短。
对于这种情况,我建议在调试器中查找抛出初始集合,或者打印每个对象类型.getClass()
和.toString()
。所以它会变得更加清晰。
groovy.lang.MissingMethodException:方法java.lang.String.name((的签名不适用于参数类型:((值:[]
表示方法name()
是在java.lang.String
上调用的,但这个类没有这样的方法。
较少代码版本:
// this method can be reused
static String extractNodeName(node) {
node instanceof groovy.util.Node ? node.name() : node
}
def tradeString = msg."**".find{ extractNodeName(it) =='m__tradeString' }
当我像方法一样调用变量时,我收到了同样的错误消息。
我做了
isSearchPage()
我应该做:
isSearchPage