删除单个元类方法
Posted
技术标签:
【中文标题】删除单个元类方法【英文标题】:Remove Single Metaclass Method 【发布时间】:2011-02-14 07:04:04 【问题描述】:我已经开始学习 Groovy,目前正在研究元类功能。我已经看到了添加新方法和删除所有方法的示例,但没有看到删除单个方法的示例。例如:
String.metaClass.foo = delegate.toUpperCase()
String.metaClass.bar = delegate.toLowerCase()
具有明显的副作用。现在我看到你可以说
String.metaClass = null
删除所有方法。我希望人们可以说一些类似于
String.metaClass.foo = null
删除 String.foo(),但保留 String.bar(),但是这个语句似乎没有任何效果。有没有办法说不应该再定义方法 foo() 而不影响 bar() 或任何其他添加的方法?
【问题讨论】:
【参考方案1】:作为后续,我在这里发布了一个错误报告:
https://issues.apache.org/jira/browse/GROOVY-4189
现在文档已经更改
查看错误报告以了解从未实施的原因
唐的回答是最好的解决办法
【讨论】:
【参考方案2】:如果您在this webpage 中搜索“删除方法”,则表示您应该能够使用上面建议的确切语法删除方法。但是我测试了它,你是对的,它似乎不起作用。
一种解决方法是分配一个抛出 MissingMethodException
的闭包,这是在调用不存在的方法时默认发生的情况,例如
// Add method
String.metaClass.foo = delegate.toUpperCase()
// Remove method
def removeMethod = throw new MissingMethodException()
String.metaClass.foo = removeMethod
诚然,这不是最令人满意的解决方案。
【讨论】:
以上是关于删除单个元类方法的主要内容,如果未能解决你的问题,请参考以下文章