2011-11-01 53 views
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进行)。但是,依赖于这些库的技术的解释也受到高度赞赏。 非常感谢您的帮助。

+0

+1:我真的很喜欢从内存中看到一个完全使用JavaCompiler的答案(没有读/写文件到磁盘),并且可以使用指定的'ClassLoader'在编译时搜索类! –

+0

我刚刚在问题中包含了你的评论,@BrunoReis。这确实是一个很好的观察,谢谢! – Sergio

回答

-1

对于类,我认为没有Javassist这样的库是不可能的,但是,如果您可以使用接口而不是抽象类,则可以使用java.lang.reflect.Proxy