如何修复Groovy.lang.MissingMethodException错误:无方法签名:

hyrbngr7  于 2022-11-01  发布在  其他
关注(0)|答案(8)|浏览(444)

我尝试使用此方法而不使用闭包

def copyAndReplaceText(source, dest, targetText, replaceText){
    dest.write(source.text.replaceAll(targetText, replaceText))
}

def source = new File('C:/geretd/resumebak.txt') //Hello World
def dest = new File('C:/geretd/resume.txt') //blank

copyAndReplaceText(source, dest){
    it.replaceAll('Visa', 'Passport!!!!')
}

但是当我运行它时,我得到了以下错误:

groovy.lang.MissingMethodException: No signature of method: ConsoleScript3.copyAndReplaceText() is applicable for argument types: (java.io.File, java.io.File, ConsoleScript3$_run_closure1) values: [C:\geretd\resumebak.txt, C:\geretd\resume.txt, ...]
Possible solutions: copyAndReplaceText(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55)

at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78)

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)

我做错了什么?

juud5qan

juud5qan1#

因为你传递了三个参数给一个四个参数的方法。而且,你没有使用传递的闭包。
如果你想指定在source内容之上的操作,那么使用闭包。它应该是这样的:

def copyAndReplaceText(source, dest, closure){
    dest.write(closure( source.text ))
}

// And you can keep your usage as:
copyAndReplaceText(source, dest){
    it.replaceAll('Visa', 'Passport!!!!')
}

如果您总是要交换字串,请传递两者,就像您的方法签章已经声明的那样:

def copyAndReplaceText(source, dest, targetText, replaceText){
    dest.write(source.text.replaceAll(targetText, replaceText))
}

copyAndReplaceText(source, dest, 'Visa', 'Passport!!!!')
58wvjzkj

58wvjzkj2#

为了帮助其他的bug搜索者,我遇到这个错误是因为这个函数不存在。
我有一个拼写错误。

8fq7wneg

8fq7wneg3#

在我的例子中,它只是我有一个与函数名称相同的变量。
示例:

def cleanCache = functionReturningABoolean()

if( cleanCache ){
    echo "Clean cache option is true, do not uninstall previous features / urls"
    uninstallCmd = ""

    // and we call the cleanCache method
    cleanCache(userId, serverName)
}
...

在后面的代码中我有一个函数:

def cleanCache(user, server){

 //some operations to the server

}

显然Groovy语言不支持这一点(但其他语言如Java支持)。我刚刚将我的函数重命名为executeCleanCache,它运行得很好(或者您也可以重命名您的变量,无论您喜欢什么选项)。

jhkqcmku

jhkqcmku4#

如果传递给方法的对象顺序不对,也会出现这个错误。换句话说,假设你的方法按顺序接受一个字符串、一个整数和一个日期。如果你传递一个日期,然后是一个字符串,然后是一个整数,你会得到同样的错误信息。

slmsl1lt

slmsl1lt5#

这也可能是因为您可能给了所有字母都是小写的classname,这是groovy(知道版本2.5.0)不支持的。
class name -接受用户,但不接受用户。

eeq64g8w

eeq64g8w6#

在我的例子中,问题是我在build.gradle文件中注解了firebase依赖项,但仍然在调试构建类型中使用:

firebaseCrashlytics {
   mappingFileUploadEnabled true
}

只需添加注解即可。

dgenwo3n

dgenwo3n7#

这是ionic/android应用程序的主要问题之一
请按照以下步骤操作。
1.从根文件夹中移除/删除节点模块

  1. npm卸载科多瓦-安卓
  2. npm安装科多瓦-安卓@10.1.1
    1.现在使用以下方法删除android平台:离子 cordova rm平台安卓
    1.现在添加平台:离子 cordova 平台添加Android
    1.构建Android项目:离子 cordova 建筑机器人
    问题将得到解决
tktrz96b

tktrz96b8#

也可以通过从静态方法调用示例方法来获取。解决方案。将缺少的static关键字添加到示例方法中

相关问题