Как исправить groovy.lang.MissingMethodException: Нет подписи метода:
Я пытаюсь использовать этот метод без закрытия
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)
Что я делаю неправильно?
9 ответов
Потому что вы передаете три аргумента методу четырех аргументов. Кроме того, вы не используете пройденное закрытие.
Если вы хотите указать операции, которые будут выполнены поверх 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!!!!')
Чтобы помочь другим охотникам за ошибками. У меня была эта ошибка, потому что функция не существует.
У меня была орфографическая ошибка.
В моем случае это было просто то, что у меня была переменная с таким же именем, как у функции.
Пример:
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, и она отлично работает (или вы также можете переименовать свою переменную в любой вариант, который вы предпочитаете).
Это также может быть связано с тем, что вы, возможно, указали имя класса со всеми буквами в нижнем регистре, что не поддерживается Groovy (известно о версии 2.5.0).
Имя класса - пользователь принят, а пользователь нет.
Вы также можете получить эту ошибку, если объекты, передаваемые методу, вышли из строя. Другими словами, скажем, ваш метод принимает по порядку строку, целое число и дату. Если вы передадите дату, затем строку, то целое число вы получите то же сообщение об ошибке.
Еще один - если вы попытаетесь вызвать суперметод/конструктор, который помечен как частный.
Если вы расширяете класс, убедитесь, что все, к чему прикасается ваш дочерний класс, помечено как защищенное или общедоступное.
Также получается путем вызова метода экземпляра из статического метода. Решение. Добавить отсутствующее статическое ключевое слово в метод экземпляра
В моем случае проблема в том, что я прокомментировал зависимость firebase в
build.gradle
файл, но все еще использующий его в типе сборки отладки:
firebaseCrashlytics {
mappingFileUploadEnabled true
}
Просто оставьте комментарий, чтобы он заработал.
Это была одна из основных проблем для приложения ionic/android.
Пожалуйста, выполните следующие действия.
- Удалить/удалить узел-модуль из корневой папки
- npm удалить кордову-андроид
- установка npm [электронная почта защищена]
- Теперь удалите платформу Android, используя: ionic cordova rm platform android
- Теперь добавьте платформу: ионная платформа Cordova, добавьте Android
- Сборка проекта Android: сборка ionic Cordova для Android
Проблема будет решена