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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误记录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)





二、解决方案



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

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

以上是关于错误记录Groovy 注入方法报错 ( Cannot add new method [hello] for arguments [[]]. It already exists )的主要内容,如果未能解决你的问题,请参考以下文章

错误记录IntelliJ IDEA 编译 Groovy 项目报错 ( Groovy SDK is not configured for module )

错误记录Groovy 运行报错 ( Exception in thread “main“ groovy.lang.MissingMethodException: No signature of )

错误记录IntelliJ IDEA 编译 Groovy 报错 ( GroovyRuntimeException: This script or class could not be run. )

错误记录Groovy 工程编译报错 ( java.lang.NoClassDefFoundError: org/apache/tools/ant/util/ReaderInputStream )

错误记录Groovy 报错 ( Execution failed for task ‘:compileGroovy‘. > org/apache/tools/ant/taskdefs/Java )

错误记录IntelliJ IDEA 编译 Groovy 报错 ( Could not open/create prefs root node SoftwareJavaSoftPrefs )