【发布时间】:2013-11-18 05:22:10
【问题描述】:
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 的实例方法。想法?
【问题讨论】:
标签: java groovy metaprogramming expandometaclass