我是这个groovy脚本的新手,因为我需要为我的项目更新java1.7到java8,在升级版本后,java和groovy都面临着groovy语法的问题。在java7中,它没有任何问题,但在java8中,它面临着以下错误。下面的错误是occruing当我试图找到特定的标记元素如下:第一个注意:在某些地方name()方法可以正常工作,但在其他地方会出现此错误请帮帮我。先谢谢你。
kokeuurv1#
在评论中讨论后..现在,我看到您使用groovy.util.Node对象遍历集合,并且调用it.name()似乎对它们有效。但是从你的问题中最初的错误信息中我也看到了String对象。所以你可能至少有两种不同的类型(String和Node)。你必须处理这个问题。
groovy.util.Node
it.name()
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上被调用,但该类没有这样的方法。更少的代码版本:
.getClass()
.toString()
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' }
50few1ms2#
当我使用一个与方法同名的变量时,我也遇到过这种情况。例如:一个带sshCommand String参数的函数,在其中我调用了:sshCommand remote: remote, command: fullCommand(fullCommand是sshCommand,我添加了一些标志)。所以我有一个字符串,在那之后使用了方法,那不是字符串,这就产生了错误。
sshCommand remote: remote, command: fullCommand
2条答案
按热度按时间kokeuurv1#
在评论中讨论后..
现在,我看到您使用
groovy.util.Node
对象遍历集合,并且调用it.name()
似乎对它们有效。但是从你的问题中最初的错误信息中我也看到了String对象。所以你可能至少有两种不同的类型(String和Node)。你必须处理这个问题。
当然,此代码可以缩短。
对于这种情况,我建议在调试器中抛出初始集合,或者打印每个对象类型
.getClass()
和.toString()
。这样会变得更清楚。groovy.lang.MissingMethodException:无方法签名:java.lang.String.name()适用于参数类型:()个值:[]
意味着方法
name()
在java.lang.String
上被调用,但该类没有这样的方法。更少的代码版本:
50few1ms2#
当我使用一个与方法同名的变量时,我也遇到过这种情况。例如:一个带sshCommand String参数的函数,在其中我调用了:
sshCommand remote: remote, command: fullCommand
(fullCommand是sshCommand,我添加了一些标志)。所以我有一个字符串,在那之后使用了方法,那不是字符串,这就产生了错误。