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

Phần Tôi quan tâm đến là: return (Comparator<T> & Serializable)Ý nghĩa của ký tự '&' trong giá trị trả về là gì?

Nhờ sự giúp đỡ của bạn!

Trả lời

10

Điều này có nghĩa rằng giá trị kết quả sẽ được đúc để ComparatorSerializable (tức là một so sánh serializable)

Lưu ý rằng khi làm diễn viên như thế này, bạn được phép chỉ định chỉ một lớp (và số lượng giao diện vô hạn), bởi vì nó không thể cho một lớp thừa hưởng từ nhiều hơn một lớp siêu.

+0

Tuyệt. Chưa bao giờ thấy điều đó trước đây! Đã bao lâu rồi? – MadConan

+0

Tôi không biết. Có lẽ khi đúc được giới thiệu như một tính năng trong Java, có nghĩa là 20 năm :) –

+1

Vâng, trong 15 năm của Java, tôi chưa bao giờ thấy điều đó. Học điều mới mỗi ngày. :) – MadConan

Các vấn đề liên quan