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. 想法?