2016-07-16 3 views
8

In Function.class von Java8 haben wir:Was ist der Zweck der unteren begrenzten Wildcard in Function.class?

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

Compose akzeptiert:

Function<? super V, ? extends T> before 

Statt:

Function<V, ? extends T> before 

Gibt es eine plausible Situation, in der die Tatsache, dass " V "ist niedriger gebundene Angelegenheiten?

+2

Die Funktionsschnittstelle wird in Fällen verwendet, in denen Sie Code in eine Methode kapseln möchten, die einen Wert als Eingabeparameter akzeptiert und nach Ausführung erforderlicher Operationen an der Eingabe einen anderen Wert zurückgibt. * Der Eingabeparametertyp und der Rückgabetyp der Methode können entweder gleich oder verschieden * sein, was sinnvoll ist – emotionlessbananas

Antwort

5

Der ? super ermöglicht es, dass der Eingabetyp Function (V) sich vom Eingabetyp unterscheidet.

Zum Beispiel, dies kompiliert mit der ? super Version, aber nicht die Alternative.

Function<Object, String> before = Object::toString; 
Function<String, Integer> after = Integer::parseInt; 
Function<Integer, Integer> composed = after.compose(before);