본문 바로가기
Language/java

[Java] 지네릭스_지네릭 타입의 형변환

by gamxong 2022. 7. 29.

지네릭 타입의 형변환

 

: 지네릭 타입과 넌지네릭(non-generic) 타입간의 형변환은 항상 가능하다. 다만 경고 발생

Box box = null;
Box<Object> objBox = null;

box = (Box)objBox;
objBox = (Box<Object>)box;

 

: 지네릭 타입과 지네릭 타입간의 형변환은 불가능.

Box<Object> objBox = null;
Box<String> strBox = null;

objBox = (Box<Object>)strBox;  // error
strBox = (Box<String>)objBox;  // error

 

: Box<String>이 Box<? extends Object>로 형변환도 가능

// 매개변수로 FruitBox<Fruit>, FruitBox<Apple>, FruitBox<Grape> 등이 가능
static Juice makeJuice(FruitBox<? extends Fruit? box) { ... }

FruitBox<? extends Fruit? box = new FruitBox<Fruit>(); //OK
FruitBox<? extends Fruit? box = new FruitBox<Apple>(); //OK
FruitBox<? extends Fruit? box = new FruitBox<Grape>(); //OK

 

: 와일드 카드가 사용된 지네릭 타입끼리도 다음과 같은 경우에는 형변환이 가능

  but, 와일드 카드는 타입이 확정된 타입이 아니므로 컴파일러는 미확정 타입으로 형변환하는 것이라고 경고.

FruitBox<? extends Object> objBox = null;
FruitBox<? extends Object> strBox = null;

strBox = (FruitBox<? extends String>)objBox;  // OK 미확정 타입으로 형변환 경고
objBox = (FruitBox<? extends Object>)strBox;  // OK 미확정 타입으로 형변환 경고

 

댓글