자바 (Java) 제네릭(Generic) 클래스에서 [Type parameter 'T' cannot be instantiated directly] - 비전공개발자
환경 : 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];
}
}
'개발 > JAVA' 카테고리의 다른 글
자바 배열의 일부분을 뒤집고 싶을 때 (0) | 2021.03.27 |
---|---|
자바 int[] 을 Integer[] 으로 배열 변경하기 (1.8) / int to integer array (0) | 2021.03.21 |
자바 1.8 - 메서드 참조란? 세미콜론 두개란? (::) (4) | 2021.03.18 |
Unhandled exception type Exception (0) | 2020.11.22 |
자바 List<Map<String, Object>> 정렬 (0) | 2020.10.30 |
댓글
이 글 공유하기
다른 글
-
자바 int[] 을 Integer[] 으로 배열 변경하기 (1.8) / int to integer array
자바 int[] 을 Integer[] 으로 배열 변경하기 (1.8) / int to integer array
2021.03.21 -
자바 1.8 - 메서드 참조란? 세미콜론 두개란? (::)
자바 1.8 - 메서드 참조란? 세미콜론 두개란? (::)
2021.03.18 -
Unhandled exception type Exception
Unhandled exception type Exception
2020.11.22 -
자바 List<Map<String, Object>> 정렬
자바 List<Map<String, Object>> 정렬
2020.10.30