본문 바로가기
Language/java

[Java] 지네릭스_와일드 카드

by gamxong 2022. 7. 29.

와일드 카드?

: 여러 가지 타입의 매개변수를 사용하기 위해서 

<? extends T>  와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T>      와일드 카드의 하한 제한. T와 그 조상들만 가능
<?>                    제한 없음. 모든 타입이 가능. <? extends Object>와 동일

※ 와일드 카드에는 '&' 사용불가.

 

class Juicer {
	static Juice makeJuice(FruitBox<? extends Fruit> box) { // <Fruit>으로 지정
    	String tmp = "";
        for(Fruit f : box.getList()) tmp += f + " ";
        return new Juice(tmp);
    }
}

 

 

Comparator에는 항상 <? super T>가 습관적으로 따라 붙는다.

class FruitComp implements Comparator<Fruit> {
	public int compare(Fruit t1, Fruit t2) {
    	return t1.weight - t2.weight;
    }
}

// List<Apple>과 List<Grape>를 모두 Comparator<Fruit>으로 정렬
Collections.sort(appleBox.getList(), new FruitComp());
Collections.sort(grapeBox.getList(), new FruitComp());

댓글