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