gpt4 book ai didi

java - map() 方法的通配符泛型

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:18 26 4
gpt4 key购买 nike

这是 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));
}
}

当我调用 map()像这样,T 的类型是什么?和 U ?通配符 ( ? ) 的类型是什么?这非常令人困惑。

Optional<String> os1 = Optional.of("Optional String");
Optional<String> os2 = os1.map(s -> s.toUpperCase());

Javadoc 声明说:

@param <U> is the type of the value returned from the mapping function.

映射函数”是指map()吗? map() 的方法或参数?

最佳答案

不管它是Stream Optional , 方法的目的 map接受 Function<? super T, ? extends U> 就是映射每个输入值T到相同或不同类型的输出 U .通配符用于扩展映射可能性的范围。

Does "mapping function" mean map() method or argument of the map()?

映射函数”是一个 T -> U Function 的匿名类的映射实现可以使用 lambda 表达式或方法引用来缩短的接口(interface)。

在您的示例中,TU都是String因为你映射了 String到它的大写变体,即 String再次。它的行为与 UnaryOperator<T> 相同 Function<T, T> 的特例它使用并返回相同的类型。

另一方面,如果你映射:

os1.map(s -> s.length())
  • TString
  • UInteger自方法String::length产生一个整数

您可以使用方法引用来缩短 lambda:

Optional<String> os2 = os1.map(String::toUpperCase);

... 或者更好地同时使用 Optional 在一起:

Optional<String> os1 = Optional.of("Optional String");
.map(String::toUpperCase);

关于java - map() 方法的通配符泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com