31. 한정적 와일드카드를 사용해 API 유연성을 높이라
문제 코드
public class Stack<E> {
private List<E> storage;
public void push(E e);
public E pop();
public boolean isEmpty();
//일련의 원소를 스택에 넣는 메서드
public void pushAll(Iterable<E> src) {
for (E e : src)
push(e);
}
//Stack안의 모든 원소를 주어진 컬렉션으로 옮겨 담는
public void popAll(Collection<E> dst) {
while (!isEmpty())
dst.add(pop());
}
public static void main(String[] args) {
Stack<Number> numberStack = new Stack<>();
ArrayList<Integer> integers =
new ArrayList<Integer>(List.of(10, 20, 30));
ArrayList<Double> doubles =
new ArrayList<Double>(List.of(10.3, 20.1, 30.55));
Collection<Object> objects = new ArrayList<>();
numberStack.pushAll(integers);
numberStack.pushAll(doubles);
numberStack.popAll(objects);
}
}- 구분설명예시허용 여부
해결책 : 한정적 와일드카드 타입
PECS (Producer - Extends , Consumer - Super)
- 종류문법용도예시
생산자 예시1
생산자 예시2
예시3 - Comparable을 구현한 E
예시 3-2
수정된 max 활용
예시4 - 타입 캡처링 기법
swap 메서드의 두 가지 선언
문제점
타입 캡처링
핵심 정리
스스로 질문 & 그 외
<? extends E> 직관적으로 봤을때, E를 상속한 클래스만 허용되는 것 같다?
<? extends E> 직관적으로 봤을때, E를 상속한 클래스만 허용되는 것 같다?입력 매개변수가 생산자와 소비자 역할을 동시에 한다면?
<E extends Comparable<? super E>> 주의사항?
<E extends Comparable<? super E>> 주의사항?ScheduledFuture란?
예시4 클라이언트에서 사용할 때 차이?
Last updated