우선 최소 컴파일에러가 나지 않을 정도로만 수정해봤습니다.
(수정된 부분은 /**/ 주석을 붙여놓았습니다.)
크게 3가지 문제가 있습니다.
1. 제너릭 타입 T는 프로그램이 실행되며 동적으로 타입이 결정되기 때문에, T 타입으로는 객체를 생성할 수 없습니다.
쉽게 생각해보면 컴파일 과정에서 바이트 코드를 생성해야 하는데 무슨 타입의 객체인지 모르기 때문에 바이트코드 생성이 불가능하여 컴파일 에러가 발생하는 것입니다.
따라서 우선은 Object 타입으로 생성 후, T 타입으로 형변환을 하는 방법을 사용하는게 쉬운 해결책입니다.
T arr[] = (T[]) new Object();
자세한 내용은 여기를 살펴보시면 좋을듯 합니다.
2. 31번 라인에서 T 타입은 객체이기 때문에 return -1을 할 수 없습니다.
자바에서 primitive type과 해당 타입과 상응하는 객체 사이에서 오토 언박싱 기능을 지원하긴 하나, 원칙적으로 T에는 뭐가 들어올지 모르는 상황이기 때문에 return null; 등으로 대체해야 합니다.
3. 자바는 디폴트 C++과는 달리, 디폴트 매개변수를 지정할 수 없습니다.(27번 라인)
T pull(int num=0) => T pull(int num)
따라서 이를 제거해 주시면 됩니다.(아마 오타일 것이라 생각합니다)
xemic 6년 전