groovy - 删除单个元类方法

标签 groovy metaclass

我已经开始学习 Groovy,目前正在研究元类功能。我看过添加新方法和删除所有方法的示例,但没有看到删除单个方法的示例。例如:

String.metaClass.foo = {delegate.toUpperCase()}
String.metaClass.bar = {delegate.toLowerCase()}

具有明显的副作用。现在我看到你可以说

String.metaClass = null

删除所有方法。我希望有人可以说一些类似于

String.metaClass.foo = null

删除String.foo(),但保留String.bar(),但是这个语句似乎没有任何效果。有没有办法说方法 foo() 不应再定义,而不影响 bar() 或任何其他添加的方法?

最佳答案

如果您搜索this webpage对于“删除方法”,它表示您应该能够使用上面建议的确切语法删除方法。但我测试了一下,你是对的,它似乎不起作用。

一种解决方法是分配一个抛出MissingMethodException的闭包,这是当您调用不存在的方法时默认发生的情况,例如

// Add method
String.metaClass.foo = {delegate.toUpperCase()}

// Remove method
def removeMethod = {throw new MissingMethodException()}
String.metaClass.foo = removeMethod

诚然,这不是最令人满意的解决方案。

关于groovy - 删除单个元类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2745615/

相关文章:

java - 用非常简单的术语来说,Groovy/Grails/Hibernate/JBoss/Jade 是什么?

sql-server - 无法从 gradle 构建脚本查询数据库

java - Intellij思想: Issues with building project using IBM JDK 7

python - 元类 - 不能替换类字典

java - Surefire 由于检查是否在 junit 测试之一中调用了 System.exit() 而失败

Python:在为 __init__subclass__() 提供参数的同时动态创建类

python - 将对象属性链接到类或对象的最佳实践方法

python - 我们如何强制为魔术方法(特殊方法)调用 getattribute() ?

groovy - 将名为 metaClass 的键放入 Map 中

validation - Grails命令对象未验证