当前位置:
首页 >
【错误记录】Groovy 函数参数动态类型报错 ( Caught: groovy.lang.MissingMethodException: No signature of method )
发布时间:2025/6/17
67
豆豆
生活随笔
收集整理的这篇文章主要介绍了
【错误记录】Groovy 函数参数动态类型报错 ( Caught: groovy.lang.MissingMethodException: No signature of method )
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 一、报错信息
- 二、解决方案
一、报错信息
定义 Groovy 函数 ,
void fun(object) {object.hello() }如果传入的 实例对象 中 , 没有定义 hello 方法 , 会导致如下报错 ;
报错代码 :
class Student {def hello(){println "Hello Student"} }class Worker {def hello(){println "Hello Worker"} }class Farmer {}void fun(object) {object.hello() }fun(new Student()) fun(new Worker())// 下面的用法会报 // Caught: groovy.lang.MissingMethodException 异常 fun(new Farmer())报错信息 :
Caught: groovy.lang.MissingMethodException: No signature of method: Farmer.hello() is applicable for argument types: () values: [] Possible solutions: sleep(long), sleep(long, groovy.lang.Closure), getAt(java.lang.String), each(groovy.lang.Closure), split(groovy.lang.Closure), wait() groovy.lang.MissingMethodException: No signature of method: Farmer.hello() is applicable for argument types: () values: [] Possible solutions: sleep(long), sleep(long, groovy.lang.Closure), getAt(java.lang.String), each(groovy.lang.Closure), split(groovy.lang.Closure), wait()at Worker$hello.call(Unknown Source)at Groovy.fun(Groovy.groovy:20)at Groovy$fun.callCurrent(Unknown Source)at Groovy.run(Groovy.groovy:28)二、解决方案
可以使用 respondsTo 方法 , 判定对象中是否定义了 hello 函数 ;
void fun(object) {if (object.respondsTo("hello")) {object.hello()} }也可参考 【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 ) 博客 , 以牺牲动态特性 , 将其限制为静态语言 , 则不会出现上述运行时错误 ;
完整代码如下 :
class Student {def hello(){println "Hello Student"} }class Worker {def hello(){println "Hello Worker"} }class Farmer {}void fun(object) {if (object.respondsTo("hello")) {object.hello()} }fun(new Student()) fun(new Worker())// 下面的用法会报 // Caught: groovy.lang.MissingMethodException 异常 fun(new Farmer())执行结果 :
Hello Student Hello Worker总结
以上是生活随笔为你收集整理的【错误记录】Groovy 函数参数动态类型报错 ( Caught: groovy.lang.MissingMethodException: No signature of method )的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 【Groovy】Groovy 动态语言特
- 下一篇: 【Groovy】MOP 元对象协议与元编