ExpandoMetaClass getMetaMethods()不返回添加的方法

时间:2014-09-17 16:21:00

标签: groovy

在调试Grails应用程序时,我发现Groovy的行为似乎有点奇怪。让我们说我想在String类中添加一些方法:

String.metaClass.myMethod = {
    println 'Hello'
}

然后我尝试使用getMetaMethods()获取元方法列表,但它不包含此方法。我知道那里的getExpandoMethods()工作正常但是不应该将类添加到类中的元方法也包含在metaMethods列表中吗?特别是当getMetaMethod()按预期工作时。代码如下:

def emptyArray = new Object[0];
assert String.metaClass.getMetaMethods().collect { it.name }.contains('myMethod') == false
assert String.metaClass.getMetaMethod('myMethod', emptyArray) != null

// and again with instance   
def text2 = 'Just for testing...'
assert text2.metaClass.getMetaMethods().collect { it.name }.contains('myMethod') == false
assert text2.metaClass.getMetaMethod('myMethod', emptyArray) != null

如果我之前尝试使用expando方法,这就更奇怪了:

def text = 'Again just for testing...'
text.metaClass.getExpandoMethods() // strange, but let's try...
assert text.metaClass.getMetaMethods().collect { it.name }.contains('myMethod') == true
assert text.metaClass.getMetaMethod('myMethod', emptyArray) != null

使用Groovy 2.3.6和2.2.2进行测试。

有什么想法吗?提前谢谢!

0 个答案:

没有答案