Java 기능 인터페이스에 대한 의문 : Comparator 인터페이스에는 왜 비교 및 같음의 두 가지 추상 메소드가 있으며 Comparator는 여전히 기능 인터페이스입니까? (@FunctionalInterface)

    첫째, 모든 기능 인터페이스는 사용할 수 있습니다 주석 : @FunctionalInterface을 . 그런 다음 주석의 javadoc을 살펴 보겠습니다.

인터페이스 유형 선언이 Java 언어 사양에 정의 된 기능적 인터페이스임을 나타내는 데 사용되는 정보 주석 유형 개념적으로 기능적 인터페이스에는 정확히 하나의 추상 메소드가 있습니다. 기본 메서드에는 구현이 있으므로 추상이 아닙니다. 인터페이스가 java.lang.Object의 공용 메서드 중 하나를 재정의하는 추상 메서드를 선언하는 경우 인터페이스의 모든 구현이 java.lang.Object 또는 다른 곳에서 구현되기 때문에 인터페이스의 추상 메서드 수에 포함되지 않습니다.
 
함수 인터페이스의 인스턴스는 람다 식, 메서드 참조 또는 생성자 참조를 사용하여 만들 수 있습니다.
 
유형이이 주석 유형으로 주석 처리 된 경우 컴파일러는 다음과 같은 경우가 아니면 오류 메시지를 생성해야합니다.
• 유형이 주석 유형, 열거 형 또는 클래스가 아닌 인터페이스 유형입니다.
• 주석이 달린 유형은 기능 인터페이스의 요구 사항을 충족합니다.
 
그러나 컴파일러는 기능 인터페이스 주석이 인터페이스 선언에 있는지 여부에 관계없이 기능 인터페이스의 정의를 충족하는 모든 인터페이스를 기능 인터페이스로 취급합니다.

    이제 수동으로 번역 해 봅시다
        . Java 언어 사양의 정의에 따라이 주석을 사용하는 인터페이스 유형 선언은 기능적 인터페이스 로 간주됩니다 . 개념적 으로 기능적 인터페이스에는 하나의 추상 메서드 만 있습니다. 기본 메서드가 구현되었으므로 추상 메서드가 아닙니다. 인터페이스에 선언 된 추상 메서드가 수퍼 클래스 Object의 공용 메서드를 재정의하는 경우 이러한 추상 메서드는 인터페이스의 추상 메서드 수에 포함되지 않습니다. 모든 인터페이스의 구현은 부모 Object 또는 다른 위치에서 이러한 메서드의 구현을 가져 오기 때문입니다.
        참고 : 기능적 인터페이스의 구현은 람다 표현식 , 메서드 참조 , 생성자 참조 등에 의해 실현 될 수 있습니다 .
        유형이이 주석을 사용하는 경우 유형이 주석 유형, 열거 또는 클래스 가 아닌 인터페이스 유형 이 아니면 컴파일러는 오류 메시지를 생성합니다 . 동시에이 어노테이션을 사용하는 인터페이스는 기능 인터페이스의 요구 사항을 충족합니다. 즉, 기능 인터페이스에는 하나의 추상 메소드 만 있습니다.
        그러나 컴파일러는 기능 인터페이스 (즉, @FunctionalInterface)의 주석이 인터페이스 선언에 사용되는지 여부에 관계없이 기능 인터페이스로 정의 된 모든 인터페이스 (기능 인터페이스의 요구 사항 충족)를 기능 인터페이스로 취급합니다.
    그것으로부터 우리는 알 수 있습니다 :

  1. 기능적 인터페이스에는 하나의 추상 메서드 만 있습니다.
  2. 기본 메서드는 이미 구현되어 있으므로 추상 메서드가 아닙니다.
  3. 수퍼 클래스 Object 클래스의 공용 메서드를 재정의하는 메서드는 인터페이스에서 추상 메서드로 간주되지 않습니다.

    따라서 Comparator 인터페이스에는 비교 및 ​​같음이 두 가지 추상 메서드가 있지만 같음은 인터페이스에서 추상 메서드로 계산되지 않으므로 Comparator 인터페이스는 여전히 기능 인터페이스의 요구 사항을 충족하며 Comparator 인터페이스는 기능 인터페이스입니다.

Java-Lambda 표현식 / 메서드 참조 / 생성자 참조 / 배열 참조 (대부분의 경우 예제)

추천

출처blog.csdn.net/H_X_P_/article/details/105030682