-
지네릭 형변환
- 지네릭 타입과 원시 타입 간의 형변환은 가능하지만 바람직하지 않다. (경고 발생)
예제
Box<Object> objBox = null; Box box = (Box)objBox; objBox = (Box<Object>)box; Box<String> strBox = null; //objBox = (Box<Object>)strBox; // 에러. 대입된 타입이 다른 지네릭 타입 간에는 불가
지네릭 타입과 넌지네릭 타입은 타입캐스팅을 통해 형변환이 가능하지만, 생략이 불가능하고 반드시 작성해야 한다.
또한 대입된 타입이 다른 지네릭 타입 간에는 형변환이 불가능하다.
- 와일드 카드가 사용된 지네릭 타입으로는 형변환이 가능하다.
예제
Box<? extends Object> wBox = (Box<? extends Object>) new Box<String>(); Box<? extends Object> wBox = new Box<String>(); // 위 문장과 동일
두 문장은 같은 의미다.
Object와 그 자손이 모두 포함되기 때문에, 지네릭 타입<String>으로 형변환이 가능해진다.
※ 지네릭 타입의 제거
- 컴파일러는 지네릭 타입을 제거하고, 필요한 곳에 형변환을 넣는다.
1) 지네릭 타입의 경계(bound)를 제거한다.
※ 하위호환성을 위해서 (안정성 때문)
2) 지네릭 타입을 제거한 후에 타입이 일치하지 않으면, 형변환을 추가한다.
3) 와일드 카드가 포함된 경우, 적절한 타입으로 형변환을 추가한다.
→ 컴파일 과정에서 지네릭스는 결국 삭제된다.
개발자의 편의를 위해 개발되었지만, 형변환은 필요하기 때문이다.
'공부 > Java' 카테고리의 다른 글
열거형에 멤버 추가하기 (0) 2024.04.30 열거형(enum) (0) 2024.04.29 지네릭 메서드 (0) 2024.04.25 와일드 카드 (0) 2024.04.25 제한된 지네릭 클래스, 지네릭스의 제약 (0) 2024.04.24