2011-11-01 2 views
2

추상화 클래스를 사용하여 특수화 클래스를 동적으로 생성하는 가장 좋은 방법은 무엇입니까?특수화 클래스의 동적 생성

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); 
    } 
} 
:

public abstract class Parent { 

    public Parent(int i) { 
     // initialization here ... 
    } 

    @AnImportantAnnotation("") 
    public abstract Object testMethod(); 
} 

은 그럼 예를 들어 같은, 그것의 추상 클래스 반환 및 인스턴스를 수신하는 방법을 가지고 싶다 : 예를 들어

,의이 내 부모 클래스라고하자

getInstance 메서드에서 반환 한 인스턴스의 클래스는 Parent 클래스에있는 추상 메서드를 재정의합니다. 생성 된 메소드의 코드는 해당하는 부모 메소드의 주석에 따라 다릅니다.

또한 생성 된 클래스는 부모와 동일한 생성자를 정의해야합니다. 예를 들어, 생성 된 클래스가 동등해야합니다 (I 외부 라이브러리를 사용하지 않고 메모리 (디스크에 파일에 읽기/쓰기)이 작업을 수행하지하는 방법과 가능하면 포인터를 선호

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을 사용할 수 있습니다.