Effective Java

이펙티브 자바 완벽 공략 2부

아이템 31 - 한정적 와일드카드를 사용해 API 유연성을 높이라

public class Stack<E> {
	...
	public void pushAll(Iterable<E> src) {
		for(E e : src)
			push(E e);
	}
}

//불공변 방식인 위와 같이 스택에 pushAll이 정의되어 있다면
//아래의 코드는 오류가 발생한다. 유연한 무언가가 필요하다.
Stack<Number> numberStack = new Stack<>();
Iterable<Integer> integers = List.of(1,2,3);
numberStack.pushAll(integers);

유연성을 극대화하려면 원소의 생산자나 소비자용 입력 매개변수에 와일드카드 타입을 사용해야 한다.



PECS: Producer-Extends, Consumer-Super



Comparator와 Comparable은 소비자



와일드카드 활용 팁



출처

이펙티브 자바 3/E
이펙티브 자바 완벽 공략 2