2016-11-12 1 views
1
의 비교기 및 직렬화 사이가

내가 여기 비트와 Comparator.comparing

Java8

에 구현 된 Comparator.comparing 방법의 소스 코드를 찾고은 코드

public static <T, U> Comparator<T> comparing(
     Function<? super T, ? extends U> keyExtractor, 
     Comparator<? super U> keyComparator) 
{ 
    Objects.requireNonNull(keyExtractor); 
    Objects.requireNonNull(keyComparator); 
    return (Comparator<T> & Serializable) 
     (c1, c2) -> keyComparator.compare(keyExtractor.apply(c1), 
              keyExtractor.apply(c2)); 
} 

에게 왜 Comparator를 사이의 비트 andSerializable이 필요하며 그 기능은 무엇입니까?

(Comparator<T> & Serializable) 

간단하게 연결하기 위해 Comparator으로 캐스팅 할 수 있습니다.

또한 숫자가 아닌 값의 경우 비트 단위 연산이 어떻게 작동합니까?

감사합니다. 유형 간의 비트 동작하지만 타입이 람다 식에 대응하는 생성 컴파일러 나타내는 교차 형, 아니다

+1

관련 항목 : http://stackoverflow.com/questions/22819804/what-is-the-type-of-an-intersected-type – assylias

답변

3

이 유형 모두 ComparatorSerializable 인터페이스를 구현한다.

2

단일 &은이 경우 비트 연산자가 아닙니다. Comparator 및 Serializable 형식의 교집합입니다. 당신은 리턴 타입이 Comparator와 Serializable을 모두 구현하기를 원한다고 주장하고있다. 여기서 트릭은 교차로가 하나의 추상적 인 메소드로 끝나는 한 인터페이스의 교차를 가져올 수 있다는 것입니다. 논리 값 및 숫자 유형을 비교하는 데 사용하지만 여기에서 무슨 일이 일어나고 있는지 아니다 될 수 있습니다 | (^, &) https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.16

비트 단위 연산자를 참조하십시오. https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22