【错误记录】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 进行方法注入普通方法 ) 博客 ;


目录
相关文章
|
XML 数据可视化 安全
IIS中的URL Rewrite模块功能学习总结
IIS中的URL Rewrite模块功能学习总结
627 0
IIS中的URL Rewrite模块功能学习总结
|
存储 缓存 算法
深入理解Python的`functools.lru_cache`装饰器
在 Python 中,有许多内置的装饰器可以用来增强函数或者类的功能。其中之一就是 `functools.lru_cache` 装饰器。这是一个非常有用的装饰器,它可以帮助我们优化递归函数,避免重复计算已经计算过的值。在这篇文章中,我们将探讨 `functools.lru_cache` 的工作原理以及如何使用它。
STM32使用PWM脉冲呼吸灯
对于灯等来说有很多种方法,前面介绍了一些基础的点灯方法,比如直接点灯,按键控制点灯,按键中断点灯,但都是比较简单的一些方法也很基础,要问我有没有什么高级点的点灯方法,答案是有的,在这我要介绍一种高级点灯的方法就是使用PWM进行点灯。
502 3
STM32使用PWM脉冲呼吸灯
|
供应链 监控 物联网
恭喜我们服务的新宝电器,入选工信部“链式”数字化典型案例
新宝电器是阿里云IoT龙头+中小供应链协同制造解决方案的标杆应用。
1004 21
恭喜我们服务的新宝电器,入选工信部“链式”数字化典型案例
|
Java 应用服务中间件 AHAS
快速体验 Sentinel 集群限流功能,只需简单几步
️ Pic by Alibaba Tech on Facebook 集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器。 Sentinel 从 1.4.0 版本开始提供集群流控特性,但使用 Sentinel 集群限流需要对一系列的动态数据源进行相关配置,并且需要对开源控制台进行一些改造,有一定的使用成本。
16384 88
|
JavaScript
Vue实战【封装一个简单的列表组件,实现增删改查】
Vue实战【封装一个简单的列表组件,实现增删改查】
551 0
Vue实战【封装一个简单的列表组件,实现增删改查】
|
SQL 存储 数据库
Navicat Premium导出数据库中的结构及数据及运行SQL文件
利用Navicat Premium导出数据库中的结构及数据利用Navicat Premium执行数据库中的结构及数据。本文以Navicat Premium15为例。
747 1
Navicat Premium导出数据库中的结构及数据及运行SQL文件
|
前端开发
在react react-router-domV6 中使用路由懒加载和路由动画效果而造成的问题
在react react-router-domV6 中使用路由懒加载和路由动画效果而造成的问题
799 0
|
存储 网络协议 开发工具
WIFI DTU产品设计与实现(基于STM32F103+QT配置上位机案例设计分享)
WIFI DTU产品设计与实现(基于STM32F103+QT配置上位机案例设计分享)
645 0
|
存储 固态存储 芯片
计算机组成原理<五>——存储系统(一)
计算机组成原理<五>——存储系统
计算机组成原理<五>——存储系统(一)