2015-05-21 15 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)); 
} 

Część mnie interesuje to: return (Comparator<T> & Serializable)Jakie jest znaczenie znaku "&" w zwróconej wartości?

Dzięki za pomoc!

Odpowiedz

10

Oznacza to, że uzyskana wartość zostanie oddane do ComparatoriSerializable (tj serializable porównawczy)

Zauważ, że gdy robi odlewane jak ten, masz prawo do określenia tylko jedną klasę (i nieskończoną ilość interfejsów), ponieważ klasa nie może dziedziczyć z więcej niż jednej super-klasy.

+0

Cool. Nigdy wcześniej tego nie widziałem! Jak długo to było? – MadConan

+0

Nie wiem. Prawdopodobnie kiedy wprowadzono casting jako funkcję w Javie, co oznacza 20 lat :) –

+1

Cóż, w ciągu 15 lat Java, nigdy tego nie widziałem. Naucz się czegoś nowego każdego dnia. :) – MadConan

Powiązane problemy