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에 관한 것인데요.

  1. 책을 참고해 보니 Function<? super T, ? extends U> mapper의 제네릭 타입 T는 map()을 호출한 객체의 제네릭 타입이고, Umapper에 인자로 전달된 메소드가 반환하는 값의 타입이라고 합니다. 그러므로 위 코드에서 TU는 둘 다 String이 됩니다. 이게 정확한 건가요?
  2. 위 코드처럼 map() 메소드에 s -> s.toUpperCase()를 인자로 전달하는 경우 두 개의 와일드카드 타입(?)은 각각 어떻게 정해지는 건가요? 사실 이것 때문에 좀 헷갈립니다. TU가 정해져도 ?가 정해지지 않으면 무의미한 게 아닌가 싶어서요...
  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)