groovy.lang.MissingMethodException:方法java.lang.String.name()



我是这个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

相关内容

最新更新