我尝试使用MetaClass
在运行时替换静态方法。
class MyClass {
private static String getString() {
'Hello'
}
String testString
MyClass() {
testString = getString()
}
}
MyClass.metaClass.static.getString = { ->
'Hello world!'
}
def test = new MyClass()
assert test.testString == 'Hello world!'
然而,这并不起作用。
Caught: Assertion failed:
assert test.testString == 'Hello world!'
| | |
| Hello false
MyClass@5876a9af
答案 0 :(得分:3)
由于bug in Groovy 2.4.3,无法通过元类更改私有方法。我已经将方法更改为public(嗯,默认)并且还更改了构造函数,以便它显式调用它的类'getString
方法,现在它似乎在Groovy web console
编辑后的完整代码:
class MyClass {
static String getString() {
'Hello'
}
String testString
MyClass() {
testString = MyClass.getString()
}
}
MyClass.metaClass.static.getString = {'Hello world!'}
def test = new MyClass()
assert test.testString == 'Hello world!'