Lebih
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?
20
3
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:Jika Anda akan selalu menukar string, oper kedua-duanya, seperti yang sudah dinyatakan oleh method signature Anda:
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.
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.