2015-05-21 27 views
13
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
     Function<? super T, ? extends U> keyExtractor) 
{ 
    Objects.requireNonNull(keyExtractor); 
    return (Comparator<T> & Serializable) 
     (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2)); 
} 

La parte che mi interessa è questo: return (Comparator<T> & Serializable)Qual è il significato del carattere "&" nel valore restituito?

Grazie per il vostro aiuto!

risposta

10

Ciò significa che il valore risultante sarà gettato al ComparatoreSerializable (vale a dire un comparatore serializzabile)

Si noti che quando si fa calchi come questo, puoi specificare solo una classe (e una quantità infinita di interfacce), perché non è possibile che una classe erediti da più di una super-classe.

+0

Freddo. Non l'ho mai visto prima! Per quanto tempo è stata una cosa? – MadConan

+0

Non lo so. Probabilmente quando la fusione è stata introdotta come funzionalità in Java, il che significa 20 anni :) –

+1

Beh, in 15 anni di Java, non l'ho mai visto. Impara qualcosa di nuovo ogni giorno. :) – MadConan

Problemi correlati