<? extends T> : 와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T> : 와일드 카드의 하한 제한. T와 그 조상들만 가능
<?> : 제한 없음. 모든 타입이 가능.<? extends Object>와 동일
메서드의 선언부에 지네릭 타입이 선언된 메서드르 지네릭 메서드라고 한다.
Collections.sort()가 바로 지네릭 메서드이며, 지네릭타입의 선언 위치는 반환 타입 바로 앞이다.
//지네릭 타입이 선언된 메서드(타입 변수는 메서드 내에서만 유효)
static <T> void sort(List<T> list, Comparator<? super T> c)
//클래스 타입 매개변수 <T>와 메서드의 타입 매개변수 <T>는 별개
class FruitBox<T>{
..
static<T> void sort(List<T> list, Comparator<? upser T> c){
}
}
FruitBox<Fruit> fruitBox = new FruitBox<Fruit>();
FruitBox<Apple> appleBox = new FruitBox<Apple>();
System.out.println(Juicer.<Fruit>makejuice(fruitBox)); //메서드 호출, 타입 대입
System.out.println(Juicer.<Apple>makejuice(appleBox)); //메서드 호출, 타입 대입
static<T extends Fruit> Juice makeJuice(FruitBox<T> box) {
String tmp =" ";
for(Fruit f : box.getList()) tmp += f+ " ";
return new Juice(tmp);
}
System.out.println(<Fruit>makeJuice(fruitBox)); //에러 클래스 이름 생략 불가
System.out.println(this.<Fruit>makeJuice(fruitBox)); //ok
System.out.println(juicer.<Fruit>makeJuice(fruitBox)); //ok
- 지네릭 메서드는 메서드를 호출할 때 마다 다른 지네릭 타입을 대입할 수 있게 한 것
- 와일드 카드는 하나의 참조변수로 서로 다른 타입이 대입된 여러 지네릭 객체를 다루기 위한 것.