지네릭스 part2

Shaun·2021년 9월 11일
0

JAVA

목록 보기
16/30

지네릭 타입의 형변환

  • 지네릭 타입과 원시 타입간의 형변환을 해보자

  • 경고가 발생하지만 가능하다

  • Box box= null;
    Box<ObjBox> = null;
    
    box = (box)objBox; //지네릭 타입-> 원시타입 ok. but 경고발생
    ObjBox=(Box<Object>)box; // 원시타입- >지네릭 ok. but 경고발생
  • 지네릭 타입과 지네릭 타입

  • Box<Object> objbox= null;
    		Box<String> strbox= null;
    	
    	box = (box)objBox; //지네릭 타입-> 원시타입 ok. but 경고발생
    	ObjBox=(Box<Object>)box; // 원시타입- >지네릭 ok. but 경고발생

    하지만!

    Box<? extends Object>wBox = new Box<String>()_ // 가능

ex

FruitBox<? extends Fruit> box= new FruitBox<Fruit>()// ok
FruitBox<? extends Fruit> box= new FruitBox<Apple>()// ok
FruitBox<? extends Fruit> box= new FruitBox<Graoge>()// ok

반대로의 형변환도 성립하지만 , 확인되지 않은 형변환이라는 경고가 발생한다. FruitBox <? extends Fruit> 에 대입될수 있는 타입이 여러 개인데다 Fruit 를 제외한 다른 타입은 FruitBox 로 형변활 될 수 없기 떄문이다.

왼쪽은 와일드 카드로 Fruit 나 fruit의 자손 apple,grape 가 가능하다. 두번쨰줄 왼쪽에 grape가(조건상 들어 올수있다) 들어오면 apple로 변환 불가능 하기 떄문에 오류 발생

ex2)

Optional<? extends Object> wopt= new Optional<Object>()
Optional<Object> oopt= new Optional<Object>()

Optional sopt=(Optional<String>)wopt; //ok
Optional sopt=(Optional<String>)oopt; // 불가

->Optional 는 Optional<T> 로 형변환 불가

지네릭 타입의 제거

  1. 지네릭 타입의 경계를 제거한다. 지네릭 타입이 <T extends Fruit> 라면 T는 Fruit로 치환된다 . <T> 의 경우는T는 object로 치환

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

  3. 지네릭은 컴파일후 사라진다

profile
호주쉐프에서 개발자까지..

0개의 댓글