在给定抽象父类的情况下动态生成专门化类的最佳方法是什么?
例如,假设这是我的父类:
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)。然而,对依赖于这些库的技术的解释也是非常值得赞赏的。非常感谢你的帮助。
对于类,我认为没有Javassist这样的库是不可能的,但是,如果您可以使用接口而不是抽象类,则可以使用java.lang.reflect.Proxy.