Manikandan KBK DIP:
なぜmap
Aとしてその入力を取るFunction
タイプの<? super P_OUT, ? extends R>
代わりに<P_OUT, ? extends R>
?
私は、たとえば行うと、
List<Integer> list = new ArrayList<>();
list.stream().map(xyz -> {}); // Here xyz is always of type Integer for this instance.
// Then why does it take input as "? super Integer"?
それがあるため、メソッドの参照を制限しないのですか?ことは、唯一のユースケースですか?
オレクサンドルPyrohov:
ワイルドカードは、<? super T>
あなたがタイプのより広範なセットで作業することができます。
あなたには、いくつか持っていると仮定し、一般的な機能を:
Function<Number, String> func = String::valueOf;
そして、次の操作を行うことができます:
List<Integer> list = List.of(1, 2);
Stream<String> stream = list.stream().map(func);
または以下:
List<Long> list = List.of(1L, 2L);
Stream<String> stream = list.stream().map(func);
パラメータがあるため、これが可能であるStream.map(...)
です:
Function<? super T, ? extends R> mapper;
これは例えば、場合ことを意味T
型であるLong
1、その後、<? super Long>
関数は型の要素を受け入れることができますLong
し、次のアサインも有効になります。
Function<? super Long, ? extends String> mapper = func;
ではFunction<T, ? extends R>
上記のどちらの例も、コンパイルされないでしょう。
1 -私たちは、構築Stream<Long>
の要素からList<Long>
。