Groovy 公开了一个ExpandoMetaClass
允许您将实例和类方法/属性动态添加到 POJO 的方法。我想用它来为我的一个 Java 类添加一个实例方法:
public class Fizz {
// ...etc.
}
Fizz fizz = new Fizz();
fizz.metaClass.doStuff = { String blah -> fizz.buzz(blah) }
这相当于将Fizz
类重构为:
public class Fizz {
// ctors, getters/setters, etc...
public void doStuff(String blah) {
buzz(blah);
}
}
我的问题:
这是否只添加doStuff(String blah)
到这个特定的实例Fizz
?还是现在的所有实例Fizz
都有一个doStuff(String blah)
实例方法?
如果是前者,我如何让所有实例Fizz
都有doStuff
实例方法?我知道如果我制作了 Groovy:
fizz.metaClass.doStuff << { String blah -> fizz.buzz(blah) }
然后将添加一个静态类方法Fizz
,例如Fizz.doStuff(String blah)
,但这不是我想要的。我只希望所有实例Fizz
现在都有一个名为doStuff
. 想法?