2016-07-16 6 views
8

Java8から、我々は持っている:Function.classの下限ワイルドカードの目的は何ですか? Function.classで

default <V> Function<V, R> compose(Function<? super V, ? extends T> before) { 
    Objects.requireNonNull(before); 
    return (V v) -> apply(before.apply(v)); 
} 

作曲は受け入れ:

Function<? super V, ? extends T> before 

むしろより:

Function<V, ? extends T> before 

は事実」という点で、任意の妥当な状況がありますVは下限ですか?

+2

関数インタフェースは、入力パラメータとして何らかの値を受け入れ、入力に対して必要な操作を実行した後に別の値を返すメソッドにコードをカプセル化する場合に使用します。 *メソッドの入力パラメータの型と戻り値の型は、同じでも異なっていてもかまいません。 – emotionlessbananas

答えて

5

? superは、返されたFunctionの入力タイプ(V)が引数入力タイプと異なることを許可します。

たとえば、これは? superバージョンでコンパイルされますが、代替バージョンではコンパイルされません。

Function<Object, String> before = Object::toString; 
Function<String, Integer> after = Integer::parseInt; 
Function<Integer, Integer> composed = after.compose(before); 
関連する問題