Java - Generics casting

iseon_u·2022년 5월 28일
0

Java

목록 보기
62/77
post-thumbnail

Generics casting 지네릭 형변환


지네릭 형변환

Box<Object> objBox = null;
Box box = (Box)objBox; // OK 지네릭 타입 -> 원시타입 ⚠️경고 발생
objBox = (Box<Object>)box; // OK 원시 타입 -> 지네릭 타입 ⚠️경고 발생
  • 지네릭 타입과 원시 타입 간의 형변환은 바람직 하지 않다. (⚠️ 경고 발생)
  • 지네릭 타입과 원시 타입은 따로 사용
objBox = (Box<Object>)strBox; // Error ❌ Box<String> -> Box<Object>
strBox = (Box<String>)objBox; // Error ❌ Box<Object> -> Box<String>
  • 다른 타입이 대입된 지네릭 타입끼리 형변환 불가 ❌
Box<? extends Object> wBox = (Box<? extends Object>)new Box<String>(); // OK ✅
Box<? extends Object> wBox = new Box<String>(); // 위 문장과 동일 (형변환 생략 가능)
  • 와일드 카드가 사용된 지네릭 타입으로는 형변환 가능 ✅

지네릭 타입의 제거

  1. 컴파일러는 지네릭 타입을 제거하고, 필요한 곳에 형변환을 넣는다. (하위 호환성 때문에)
    • <T> → Object
  2. 지네릭 타입 제거 후 타입 불일치하면, 형변환을 추가
  3. 와일드 카드가 포함된 경우, 적절한 타입으로 형변환 추가
profile
🧑🏻‍💻 Hello World!

0개의 댓글