CHAPTER 12. (3) 와일드 카드란? (제네릭 메서드 포함)
와일드 카드
- 제네릭 타입에 다형성 적용하는 방법
- 기호는 ? 사용
- extends, super로 제한 가능 (상한, 하한)
<? extends T> 와일드 카드의 상한 제한, T와 그 자손들만 가능
<? super T> 와일드 카드의 하한 제한, T와 그 조상들만 가능
<?> 제한 없음. 모든 타입 가능 <? extends Object> 와 동일
ex.
// 제네릭 타입이 ? extends Product'면 Product와 그 자손들(ex.Tv, Radio) 가능
ArrayList<? extends Product> list = new ArrayList(); // 가능
ArrayList<? extends Product> list = new ArrayList(); // 가능
ArrayList<? extends Product> list = new ArrayList(); // 가능
제네릭 메서드
- 메서드 선언부에 제네릭 타입이 선언된 메서드 (ex.Collections.sort())
- 위치는 반환 타입 바로 앞
ex.
static <T> void sort(List list, Comparator<? super T> c)
<Person> Person
<T> T
☆ 제네릭 클래스에 선언된 타입 매개변수 T 와 제네릭 메서드에 선언된 타입 매개변수 T는 서로 다른 것
static멤버는 타입 매개변수 사용 불가능, but 메서드에 제네릭 타입 선언하고 사용하는 것 가능
ㄴ 왜? 메서드에 선언된 제네릭 타입은 지역변수 선언과 같다고 생각하면 됨 (메서드 내에서만 지역적으로 사용할 것)
15part, 16part 스킵