2
给定抽象父类动态生成专业化类的最佳方法是什么?动态生成专业化类
例如,让我们说这是我的父类:
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:我真的很喜欢从内存中看到一个完全使用JavaCompiler的答案(没有读/写文件到磁盘),并且可以使用指定的'ClassLoader'在编译时搜索类! –
我刚刚在问题中包含了你的评论,@BrunoReis。这确实是一个很好的观察,谢谢! – Sergio