Каков наилучший способ динамической генерации класса специализации с использованием абстрактного родительского класса?
Например, предположим, что это мой родительский класс:
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).Тем не менее, объяснения методов в зависимости от таких библиотек также высоко оценены.Большое спасибо за любую помощь.