用groovy扩展Java类

用groovy扩展Java类,java,dynamic,groovy,extend,Java,Dynamic,Groovy,Extend,我有一个java类(名为a),需要由groovy执行。这个类是独立的。我想用类B动态扩展它 A类的代码: public class A { public void run() { System.out.println(context); } } B类代码: public class B { protected String context; public void setContext(Context c) { this.con

我有一个java类(名为a),需要由groovy执行。这个类是独立的。我想用类B动态扩展它

A类的代码:

public class A {
    public void run() {
        System.out.println(context);
    }
}
B类代码:

public class B {
    protected String context;

    public void setContext(Context c) {
        this.context = c;
    }
}
控制groovy的代码:

String code = FileUtils.readFileAsString(new File("A.java"));
GroovyObject obj = new GroovyClassLoader().parseClass(code).newInstance();
// here I want to make A extend B
我尝试使用obj.setMetaClass,但在Java中找不到任何示例


有人已经这样做了吗?

如果您正在尝试用java执行,请尝试以下操作:

Class a = new GroovyClassLoader().parseClass(aSourceString);//your A class; 
Class b = new GroovyClassLoader().parseClass(bSourceString);//your B class

ExpandoMetaClass emc = new ExpandoMetaClass(a, false, true);

List<Class> classes = new ArrayList<Class>();
classes.add(b);
MixinInMetaClass.mixinClassesToMetaClass(emc, classes);

MetaClassRegistry mcreg = MetaClassRegistryImpl.getInstance(MetaClassRegistryImpl.LOAD_DEFAULT);
mcreg.setMetaClass(a, emc);
emc.initialize();

System.out.println(((GroovyObject)j.newInstance()).invokeMethod("setContext", new Context()));//or however you get a Context obj

这是用Java实现的吗?
//given same class parsing as above
a.mixin(b)

def aObj = a.newInstance()
aObj.context = new Context()