원문링크

하위 제한 와일드카드 Lower Bounded Wildcards

상위제한와일드카드장은 특정 타입이나 그 특정타입의 서브타입을 알 수 없을때는 ‘extends’ 키워드를 사용하는 것을 보여줬다. 비슷한 것으로, 하위제한와일드카드는 특정타입이나 그 특정 타입의 슈퍼타입을 제한하고자할때 사용한다.
The Upper Bounded Wildcards section shows that an upper bounded wildcard restricts the unknown type to be a specific type or a subtype of that type and is represented using the extends keyword. In a similar way, a lower bounded wildcard restricts the unknown type to be a specific type or a super type of that type.

하위제한 와일드카드는 와일드카드문자(‘?’) 그 뒤로 super 키워드와 그 뒤로 하위제한 타입이 온다. <? super A>.
A lower bounded wildcard is expressed using the wildcard character (‘?’), following by the super keyword, followed by its lower bound: <? super A>.

중요: 상위제한와일드카드를 사용하거나 하위제한와일드카드를 사용할 수 있지만, 둘을 동시에 사용할 수 없다.
Note: You can specify an upper bound for a wildcard, or you can specify a lower bound, but you cannot specify both.

리스트에 Integer 객체를 넣는 코드를 작성할때, List<Integer>, List<Number>, List<Object\>에서만 동작하길 원하는 메서드를 만든다고 가정하자.
Say you want to write a method that puts Integer objects into a list. To maximize flexibility, you would like the method to work on List, List, and List — anything that can hold Integer values.

Integer타이이나 Integer의 상위타입에서 동작하는 메서드를 작성하려면 List<? super Integer>라고 할 수 있다. List<Integer>는 List<? super Integer>보다 제한적이다. 왜냐하면 전자는 Integer 타입의 리스트만 사용, 후자는 Integer 타입과 Integer의 슈퍼타입에 사용할 수 있기 때문이다.
To write the method that works on lists of Integer and the supertypes of Integer, such as Integer, Number, and Object, you would specify List<? super Integer>. The term List is more restrictive than List<? super Integer> because the former matches a list of type Integer only, whereas the latter matches a list of any type that is a supertype of Integer.

아래의 코드는 1에서 10까지 리스트에 add한다.
The following code adds the numbers 1 through 10 to the end of a list:

public static void addNumbers(List<? super Integer> list) {
    for (int i = 1; i <= 10; i++) {
        list.add(i);
    }
}

와일드카드 사용절에서는 상위제한와일드카드와 하위제한와일드카드를 각각 언제 사용할지 설명하였다.
The Guidelines for Wildcard Use section provides guidance on when to use upper bounded wildcards and when to use lower bounded wildcards.

comments powered by Disqus