专门化类的动态生成



在给定抽象父类的情况下动态生成专门化类的最佳方法是什么?

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

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.

相关内容

  • 没有找到相关文章