본문 바로가기

하../java

ch12 제네릭 타입의 형변환

제네릭 타입과 원시 타입 간의 형변환은 바람직 하지 않다(경고 발생)
        Box b = null;
		Box<String> bStr = null;
		
		b = (Box)bStr;		//Box<String> -> Box 가능 그러나 경고
		bStr = (Box<String>)b; // Box -> Box<String> 가능하지만 경고
와일드 카드가 사용된 제네릭 타입으로는 형변환 가능
        FruitBox<? extends Fruit> fbox = (FruitBox<? extends Fruit>)new FruitBox<Fruit>();
	    FruitBox<? extends Fruit> abox = new FruitBox<Fruit>(); //자동으로 생략

제네릭 타입의 제거

- 컴파일러는 제네릭 타입을 제거하고 피룡한 곳에 형변환을 넣는다.

1. 제네릭 타입의 경계(bound)를 제거

 

 

하위 호완성을 위해 원래는 Object o 로 바뀌지만 Fruit로 제한을 걸었기 떄문에 Fruit t로 변경

2. 제네릭 타입 제거 후에 타입이 불일치하면 형변환을 추가

컴파일러가 자동으로 추가

3. 와일드 카드가 포함된경우 적절한 타입으로 형변환 추가