자바의 정석 - 제너릭 5

송용준·2023년 5월 11일

제너릭 타입의 형변환

  • 제너릭 타입과 원시 타입간의 형변환은 바람직 하지 않다(경고발생)
    (제너릭이 없는 타입은 원시타입)
Box<Object> objBox = null;
Box box = (Box) objBox;		// ok. 제너릭타입 -> 원시타입. 경고발생
objBox = (Box<Object>)box;	// ok. 원시타입 -> 제너릭타입. 경고발생

objBox = (Box<Object>)strBox;	// 에러. Box<String> -> Box<Object>
strBox = (Box<String>)objBox;	// 에러. Box<Object> -> Box<String>
  • 와일드 카드가 사용된 제너릭 타입으로는 형변환 가능
Box<Object> objBox = (Box<Object>)new Box<String>();	// 에러. 형변환 불가능
Box<? extends Object> wBox = (Box<? extends Object>)new Box<String>();	// ok
Box<? extends Object> wBox = new Box<String>();	// 같은 문장

제너릭 타입의 제거

  • 컴파일러는 제너릭 타입을 제거하고, 필요한 곳에 형변환을 넣는다.
  1. 제너릭 타입의 경계를 제거
  2. 제너릭 타입 제거 후에 타입이 불일치하면, 형변환을 추가
  3. 와일드 카드가 포함된 경우, 적절한 타입으로 형변환 추가
profile
용용

0개의 댓글