groovy.lang.MissingMethodException nasıl düzeltilir: Yöntemin imzası yok:
Bu yöntemi bir kapatma olmadan kullanmaya çalışıyorum
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!!!!')
}
ancak çalıştırdığımda aşağıdaki hatayı alıyorum:
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)
Neyi yanlış yapıyorum?
20
3
Çünkü dört argümanlı bir yönteme üç argüman geçiriyorsunuz. Ayrıca, geçirilen kapanışı kullanmıyorsunuz.
Eğer
kaynak
içeriğinin üzerinde yapılacak işlemleri belirtmek istiyorsanız, o zaman bir closure kullanın. Şöyle bir şey olabilir:Dizeleri her zaman değiştirecekseniz, yöntem imzanızda zaten belirtildiği gibi her ikisini de geçirin:
Bunun nedeni, groovy'nin (2.5.0 sürümünü biliyorsunuz) desteklemediği bir şey olan tüm harfleri küçük harfle sınıf adı vermiş olmanız da olabilir.
sınıf adı - Kullanıcı kabul edilir ancak kullanıcı kabul edilmez.
Bu hatayı, yönteme aktardığınız nesneler sırasızsa da alabilirsiniz. Başka bir deyişle, yönteminizin sırasıyla bir dize, bir tamsayı ve bir tarih aldığını varsayalım. Önce bir tarih, sonra bir dize, sonra da bir tamsayı geçirirseniz aynı hata mesajını alırsınız.