Box<Object> objBox = null;
Box box = null;
Box box = (Box)objBox; // ok, 지네릭 타입 -> 원시타입, 경고 발생
objBox = (Box<Object>)box; // ok, 원시타입 -> 지네릭 타입, 경고 발생
objBox = (Box<Object>)strBox; // 에러, Box<String> -x> Box<Object>
strBox = (Box<String>)objBox; // 에러, Box<Object> -x> 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>(); // 위 문장과 동일
class Box<T extends Fruit>{
void add(T t){
. . . .
}
}
위 코드를 컴파일 하면
class Box {
void add(Fruit t) {
. . .
}
}
으로 변환이 된다. 지네릭 타입이 제거 되고 T가 Object로 변환 된다.
하위 호환성, 즉 JDK1.5 버전 지네릭이 포함된 이전 버전과 호환이 가능하게 되도록 하기 위함이다.
지네릭 타입 제거 후에 타입이 불일치하면, 형변환을 추가
와일드 카드가 포함된 경우, 적절한 타입으로 형변환 추가