cara memperbaiki groovy.lang.MissingMethodException: Tidak ada tanda tangan metode:

Saya mencoba menggunakan metode ini tanpa penutupan

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!!!!')
}

tetapi ketika saya menjalankannya saya mendapatkan kesalahan berikut:

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)

Apa yang saya lakukan salah?

Larutan

Karena Anda mengoper tiga argumen ke metode empat argumen. Juga, Anda tidak menggunakan closure yang dilewatkan.

Jika Anda ingin menentukan operasi yang akan dibuat di atas konten source, maka gunakan closure. Ini akan menjadi seperti ini:

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

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

Jika Anda akan selalu menukar string, oper kedua-duanya, seperti yang sudah dinyatakan oleh method signature Anda:

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

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

Ini mungkin juga karena Anda mungkin telah memberikan nama kelas dengan semua huruf dalam huruf kecil sesuatu yang tidak didukung oleh Groovy (tahu versi 2.5.0).

nama kelas - Pengguna diterima tetapi pengguna tidak.

Komentar (0)

Anda juga bisa mendapatkan error ini jika objek yang Anda oper ke metode tidak sesuai urutan. Dengan kata lain, katakanlah metode Anda mengambil, secara berurutan, string, integer, dan tanggal. Jika Anda mengoper tanggal, lalu string, lalu integer, Anda akan mendapatkan pesan error yang sama.

Komentar (0)