groovy.lang.MissingMethodException:无方法签名:java.lang.String.name()适用于参数类型:()个值:[]

kuarbcqp  于 2022-11-01  发布在  Java
关注(0)|答案(2)|浏览(234)

我是这个groovy脚本的新手,因为我需要为我的项目更新java1.7到java8,在升级版本后,java和groovy都面临着groovy语法的问题。在java7中,它没有任何问题,但在java8中,它面临着以下错误。
下面的错误是occruing当我试图找到特定的标记元素如下:
第一个
注意:在某些地方name()方法可以正常工作,但在其他地方会出现此错误
请帮帮我。
先谢谢你。

kokeuurv

kokeuurv1#

在评论中讨论后..
现在,我看到您使用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' }
50few1ms

50few1ms2#

当我使用一个与方法同名的变量时,我也遇到过这种情况。例如:一个带sshCommand String参数的函数,在其中我调用了:sshCommand remote: remote, command: fullCommand
(fullCommand是sshCommand,我添加了一些标志)。所以我有一个字符串,在那之后使用了方法,那不是字符串,这就产生了错误。

相关问题