Java Optional 클래스의 map() 메소드에 관하여
조회수 732회
Optional 클래스의 map() 메소드 원형을 보면 아래와 같이 작성되어 있습니다.
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
그리고 메인 메소드에서 아래와 같은 코드를 작성했습니다.
Optional<String> os1 = Optional.of("Optional String");
Optional<String> os2 = os1.map(s -> s.toUpperCase());
여기서 제가 궁금한 건 map()의 매개변수 mapper에 관한 것인데요.
- 책을 참고해 보니
Function<? super T, ? extends U> mapper
의 제네릭 타입T
는 map()을 호출한 객체의 제네릭 타입이고,U
는mapper
에 인자로 전달된 메소드가 반환하는 값의 타입이라고 합니다. 그러므로 위 코드에서T
와U
는 둘 다String
이 됩니다. 이게 정확한 건가요? - 위 코드처럼 map() 메소드에
s -> s.toUpperCase()
를 인자로 전달하는 경우 두 개의 와일드카드 타입(?
)은 각각 어떻게 정해지는 건가요? 사실 이것 때문에 좀 헷갈립니다.T
와U
가 정해져도?
가 정해지지 않으면 무의미한 게 아닌가 싶어서요...
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력