환경 : jdk 1.8

 

자바 제네릭 클래스를 만들 때, 특히 생성자에서 제네릭으로 받은 타입의 객체를 new 키워드를 사용해서 초기화 해주고 싶은 경우가 있다.

 

예를 들어

public class MyClass<T> {
    private T type = null;
    public MyClass() {
        this.type = new T(); // error => Type parameter 'T' cannot be instantiated directly
    }
}

위와 같이 에러가 난다. 제네릭 타입으로 받는 클래스는 어떤 방법으로 생성해야할지 모르므로(기본생성자가 없을수도 있으므로) 위와 같이 사용하는 것을 허용하지 않는 것이다.

 

 

만약 굳이 생성자 내부에서 제네릭으로 받을 객체를 생성해야 한다면,

형변환을 이용해볼 수 있다.

public class MyClass<T> {
    private T type = null;
    public MyClass() {
        this.type = (T)new Object();
    }
}

실제로 이는 아무것도 없는 Object 클래스를 인스턴스화 한 것이기 때문에 T로 변환해도 의미있는 데이터가 아니다.

 

다만 나의 경우는 타입이 제한된 배열을 생성하기 위해 사용하였다.

public class MyClass<T> {
    private T list = null;
    public MyClass() {
        this.list = (T[]) new Object[10000];
    }
}