【错误记录】Groovy 注入方法报错 ( Cannot add new method [hello] for arguments [[]]. It already exists )

简介: 【错误记录】Groovy 注入方法报错 ( Cannot add new method [hello] for arguments [[]]. It already exists )

一、报错信息


使用 MetaClass 为类注入方法时 , 如果注入的方法与类中原有的方法有冲突 ,

class Student {
    def name;
    def hello() {
        println "Hello " + name
    }
}
// 向 Student 类注入 hello 方法
Student.metaClass.hello << {
    println delegate
    println "Hello ${delegate.name}"
}

执行上述方法 , 会有如下报错 ;


报错信息 :

Caught: groovy.lang.GroovyRuntimeException: Cannot add new method [hello] for arguments [[]]. It already exists!
groovy.lang.GroovyRuntimeException: Cannot add new method [hello] for arguments [[]]. It already exists!
  at Groovy.run(Groovy.groovy:11)

image.png

image.png

二、解决方案


如果使用 Category 分类的方式注入方法 , 注入的方法可以与类中原来的方法相同 , 参考 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 ) 博客 ;


使用 MetaClass 的方式注入方法 , 注入的方法不可与原来的方法冲突 , 否则就会报上述错误 ; 参考 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 进行方法注入普通方法 ) 博客 ;


目录
相关文章
|
5月前
|
缓存 Dart 开发工具
解决Flutter报错The method ‘File.create‘ has fewer named arguments than those of overridden method
解决Flutter报错The method ‘File.create‘ has fewer named arguments than those of overridden method
71 3
|
3月前
|
数据采集 存储 安全
Java零基础-replace(CharSequence target, CharSequence replacement)详解
【10月更文挑战第8天】Java零基础教学篇,手把手实践教学!
30 1
|
6月前
|
Java Maven
@Date不管用怎么办,想少写get和setter方法,reate方法创建不了怎么办,Cannot resolve method ‘setxxx‘ in ‘xxx‘不管用怎么办,到Maven创建插件
@Date不管用怎么办,想少写get和setter方法,reate方法创建不了怎么办,Cannot resolve method ‘setxxx‘ in ‘xxx‘不管用怎么办,到Maven创建插件
‘;‘ expected,Missing semicolon.Syntax Missing semicolon multi (web,若依定义方法,修改method,之后在mounted()用this
‘;‘ expected,Missing semicolon.Syntax Missing semicolon multi (web,若依定义方法,修改method,之后在mounted()用this
TypeError: Cannot set properties of undefined (setting ‘resdata‘),res定义数据出现的问题,定义的方法用this换成that
TypeError: Cannot set properties of undefined (setting ‘resdata‘),res定义数据出现的问题,定义的方法用this换成that
|
8月前
|
XML 缓存 Java
Spring5源码(7)-lookup-method和replace-method注入
Spring5源码(7)-lookup-method和replace-method注入
130 0
|
Java
Java Error: The public type HelloWorld must be defined in its own file
Java Error: The public type HelloWorld must be defined in its own file
182 0
|
消息中间件 Java RocketMQ
【Java】Error creating bean with name ‘functionBindingRegistrar‘ defined in class path resource的一种解决方式
【Java】Error creating bean with name ‘functionBindingRegistrar‘ defined in class path resource的一种解决方式
157 0
|
Java 关系型数据库 MySQL
15. 成功解决:java: Can't generate mapping method with primitive return type.
今天启动 SpringBoot 项目时,报了如下错误:`java: Can't generate mapping method with primitive return type.`
1068 0
|
Java Spring
Spring源码(二-2)-lookup-method、replaced-method标签
lookup-method 通常称为获取器注入,spring in action 中对它的描述是,一种特殊的方法注入,它是把一个方法声明为返回某种类型的 bean,而实际要返回的 bean 是在配置文件里面配置的。
585 1

热门文章

最新文章