2014-11-04 4 views
1

추상 클래스에서 제네릭 형식 매개 변수로 제공되는 클래스를 인스턴스화 할 수 있습니까?제네릭 형식으로 인스턴스화하는 방법?

예 : 다른 추상 클래스 내에서이 클래스의 인스턴스를

public MyClass { 
    public MyClass(String test) { 

    } 
} 

이 가능합니까?

public abstract class AbstractClass<T extends MyClass> { 
    public AbstractClass() { 
     T t = new T("test"); //Cannot instantiate the type T 
    } 
} 

답변

5

그리 간단하지 않습니다.

유형 삭제 후 일반 유형을 보유 할 Class<T>이 필요합니다.

그런 다음 원하는 생성자를 트리거하고 새 인스턴스를 동적으로 만들려면 Class#getDeclaredConstructor(Class<?> .. params)을 호출해야합니다. 예 :

public abstract class AbstractClass<T extends MyClass> { 
    public AbstractClass(Class<T> clazz) { 
     T t = clazz.getDeclaredConstructor(String.class).newInstance("test"); 
    } 
} 
관련 문제