<R> Stream <R> map(函数<?super T,?extends R> mapper)Stream

Moh*_*rmi 6 java java-stream

我在看流界面,发现这个方法:

 <R> Stream<R> map(Function<? super T, ? extends R> mapper);
Run Code Online (Sandbox Code Playgroud)

我找不到任何理由为什么"?延伸R"代替R:

 <R> Stream<R> map(Function<? super T, R> mapper);
Run Code Online (Sandbox Code Playgroud)

那么如果我像上面这样做会有什么不同?不是"?" 是我传递的R变量?它会延长RI无法找到原因.

ern*_*t_k 11

它用于? extends R允许map声明的函数返回一个子类型R

例如,给定此流:

Stream<Number> numberStream = Stream.of(1, 2L);
Run Code Online (Sandbox Code Playgroud)

在以下map调用中,RNumber,但函数的类型为Function<Number, Integer>:

Function<Number, Integer> function = n -> Integer.valueOf(n.intValue());
Stream<Number> numberStream2 = numberStream.map(function); //would have failed
Run Code Online (Sandbox Code Playgroud)

如果它没有采取? extends R,那么function本来是一个无效的论点(Function<Number, Number>本来是必需的)