가끔 오픈소스 코드 보다보면 내부에 아래 같은 표현이 있어서 뭔가 싶었는데 이참에 정리해봤다.
<?> : Unbounded Wildcard : 어떤 타입이든 허용 (제한 없음)
<? extends T> : Upper Bounded Wildcard : T 또는 T의 하위 타입 (상한 제한)
<? super T> : Lower Bounded Wildcard : T 또는 T의 상위 타입 (하한 제한)
기억하기 어려우면 PECS로 기억하면 된다.
Producer extends / Consumer super
생산자는 extends를 쓰고, Consumer는 super를 쓴다 정도로,
아래 예시 보면 좀 이해가 도움이 될 듯
static <T> void copy(List<? super T> dest, List<? extends T> src) {
for (T e : src) { // src는 값을 "내어주는" 생산자
dest.add(e); // dest는 값을 "받아먹는" 소비자
}
}
src는 ? extends T → 생산자(읽기 전용)
dest는 ? super T → 소비자(쓰기 안전)
'Java' 카테고리의 다른 글
| [Java] Java Virtual Threads (0) | 2023.10.14 |
|---|---|
| [Java] Java의 참조 (0) | 2023.01.01 |
| [Java] ConcurrentModificationException 예외 해결 방법 (0) | 2022.12.08 |
| [Java] 외부에서 스레드를 안전하게 종료하는 방법 (0) | 2022.11.30 |
| [Java] 생성자에서는 getInstance호출에 신중하자. (0) | 2022.11.30 |