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?

Çözüm

Çü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:

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

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

Dizeleri her zaman değiştirecekseniz, yöntem imzanızda zaten belirtildiği gibi her ikisini de geçirin:

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

copyAndReplaceText(source, dest, 'Visa', 'Passport!!!!')
Yorumlar (8)

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.

Yorumlar (0)

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.

Yorumlar (0)