지네릭 타입의 형변환
: 지네릭 타입과 넌지네릭(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 미확정 타입으로 형변환 경고
'Language > java' 카테고리의 다른 글
[Java] 열거형_열거형이란? (0) | 2022.07.30 |
---|---|
[Java] 지네릭스_지네릭 타입의 제거 (0) | 2022.07.29 |
[Java] 지네릭스_지네릭 메서드 (0) | 2022.07.29 |
[Java] 지네릭스_와일드 카드 (0) | 2022.07.29 |
[Java] 지네릭스_제한된 지네릭 클래스 (1) | 2022.07.29 |
댓글