Groovy 删除单元类方法

Groovy 删除单元类方法,groovy,metaclass,Groovy,Metaclass,我已经开始学习Groovy,目前正在研究元类功能。我看到过添加新方法和删除所有方法的示例,但没有看到删除单个方法的示例。例如: String.metaClass.foo = {delegate.toUpperCase()} String.metaClass.bar = {delegate.toLowerCase()} 有明显的副作用。现在我知道你可以说 String.metaClass = null 删除所有的方法。我希望有人能说些类似的话 String.metaClass.foo = nu

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

String.metaClass.foo = {delegate.toUpperCase()}
String.metaClass.bar = {delegate.toLowerCase()}
有明显的副作用。现在我知道你可以说

String.metaClass = null
删除所有的方法。我希望有人能说些类似的话

String.metaClass.foo = null
删除String.foo(),但保留String.bar(),但是此语句似乎没有任何效果。有没有一种方法可以说不应该再定义方法foo(),而不会影响bar()或任何其他添加的方法?

如果搜索“remove method”,它会说您应该能够使用上面建议的确切语法删除方法。但是我测试过了,你是对的,它似乎不起作用

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

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

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

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

作为后续,我在这里发布了一个bug报告:

现在文档已经更改了

请参阅错误报告,了解从未实现此功能的原因

唐的回答是最好的解决办法