动态生成专业化类

时间:2011-11-01 13:49:00

标签: java reflection classloader

给定抽象父类动态生成特化类的最佳方法是什么?

例如,假设这是我的父类:

public abstract class Parent {

    public Parent(int i) {
      // initialization here ...
    }

    @AnImportantAnnotation("")
    public abstract Object testMethod();
}

然后我希望有一个接收抽象类的方法,并返回它的实例,例如:

public class Manager {
    public static <T> T getInstance(Class<T> c) {
        return <"instance of dynamically generated specialization class">;
    }

    public static void main(String[] args) {
        Parent parent = getInstance(Parent.class);
    }
}

getInstance方法返回的实例的类会覆盖Parent类中的抽象方法。这些生成的方法的代码取决于其相应父方法的注释。

此外,生成的类应该定义与其父类相同的构造函数。例如,生成的类应该等效于:

public class Son extends Parent {

    //generated constructor
    public Son(int i) {
        super(i);
    }

    public Object testMethod() {
        // dynamically generated behaviour guided by annotations on the overridden method
        return aReturnValue;
    }
}

我更喜欢指向如何仅从内存(没有文件读/写文件)以及如果可能的话不使用外部库(例如,Javassist)。然而,对于依赖于这些库的技术的解释也是非常受欢迎的。 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

对于类,我认为没有像Javassist这样的库是不可能的,但是,如果你可以使用接口而不是抽象类,你可以使用java.lang.reflect.Proxy