Java8 --- 기능 인터페이스와 기본 키워드 @FunctionalInterface

비교기와 대등 소개 (1)

비교기에서 언급 한 바와 같이, 대략 다음 비교기 필적 인터페이스의 차이에 대해 말하자면.

비교기는 전략 모드, 즉, 그 자체가 (어떤 종류의 인터페이스를 구현하는) 변경 사항을 비교하지만, 비교기 전략을 인스턴스화하여 객체 사이의 정렬을 구현하기 위해 필요로하지 않는 객체입니다.

Comparable를 변경 정렬 기능을 가지고, (Comparable 인터페이스를 구현하는 객체 자체) 자체를 개체를 지원합니다.

예를 들어, 개체 집합이 두 가지 방법은, 어느 객체 Comparable 인터페이스를 달성하기 위해, 정렬 방법 컬렉션으로 분류 할 필요가 보자, 그 자체가 일종의을 가진 속성, 달성 중 하나 비교기 비교기, 정렬의 전송 로.

 

여기서 다시 람다 표현식에 대해 이야기.

 

2. 람다 표현식

첫째, 그는 인터페이스의 종류이지만, 오직 하나의 추상적 인 방법이있다 : 우리 모두가 알다시피, 람다 표현식은 먼저 이러한 조건을 충족해야 람다 표현식을 사용하여, 자바 프로그래밍 기능을 내부에 있습니다. 그럼 람다 표현식을 사용하는 예를 살펴 보자.

 

Java7 표현 봐 :

공공  클래스 LambdaTest {

    공공  정적  무효 메인 (문자열 []에 args) {

        TEST1 말 = () {말을

            @보수

            공공  무효 saySomthing (문자열 일) {

                에서 System.out.println (일);

            }

        };

        test2.saySomthing (「안녕하세요」);

}

인터페이스 말 {

    무효 saySomthing (문자열 뭔가를)

}

 

람다 표현식을 사용하는 Java8 표현 :

공공  클래스 LambdaTest {

    공공  정적  무효 메인 (문자열 []에 args) {

        말 TEST2 = System.out에 ::에 println;

        test2.saySomthing (「안녕하세요」);

    }

}

인터페이스 말 {

    무효 saySomthing (문자열 뭔가를)

}

 

그래서 비슷한, 우리가 쓰는 것 비교기 비교기를 구현해야한다 :

 

공공  클래스 LambdaTest {

    공공  정적  무효 메인 (문자열 []에 args) {

       비교기 <책> bookComparator = Comparator.comparing (도서 :: getPrice);

       

       책 BOOK1 = 새로운 도서 ( "A", 1 );

       책 BOOK2 =  도서 ( "B", 1 );

       에서 System.out.println (bookComparator.compare (BOOK1, BOOK2));

    }

}

클래스 예약 {

    개인 문자열 이름;

    개인 정수의 가격;

    

    // 생성자 생략 / 게터 / 세터 

}

 

완전히 확인 서면,하지만 우리는 좀 비교기 인터페이스 소스 코드를 가지고, 당신은 조금 놀랄 느낄 수 있습니다.

비교기 인터페이스 소스 코드는 몇 가지 점을 지적 할 수있다 :

 

@FunctionalInterface 주석의 역할

복수의 비교기 인터페이스 방법 (두 추상 방법 및 기본 복수의 방법)

의미 기본 키워드

하나 다음 하나는 위의 세 가지 점을 설명합니다.

 

롤 (1) 주석 @FunctionalInterface

@FunctionalInterface가 인터페이스에 표시되어, 인터페이스는 상술 한 인터페이스의 기능이다.

기능 인터페이스에 대한 어떤 것은 다음과 같은 특징이 있습니다 :

 

단지 추상적 인 방법이있다

여러 정적 메서드가있을 수 있습니다

이 방법은 기본적으로 다수 가질 수있다 (기본 방법)

공공 추상적 인 방법은 객체의 복수를 할 수 있습니다

(2) 콤퍼레이터 인터페이스 메소드 복수 (두 추상 방법 및 기본 복수의 방법)

비교기 인터페이스는 추상적 인 방법과 비교 외에도 방법은 추상적 동일 있다는 것을 알 수 있지만, 기능 인터페이스 공개 추상 객체 메소드를 허용한다면 바와 같이, 전술 한 바와.

 

의미 (3) 기본 키워드

기본 키워드 인터페이스 메소드는 기본 메소드 본문을 수정할 수 있습니다. 인터페이스를 구현하는 인터페이스 구현 클래스는 기본 키워드 수정 방법은 달성 할 수없는 경우.

이것은 이러한 시나리오를 해결하기 위해 수행됩니다

다음과 같이 정의 된 인터페이스가 가정 :

 

인터페이스 TestInterFace {

    무효 해봐요 ();

}

 

이 응용 프로그램의 인터페이스를 구현하는 클래스의 많은,하지만 갑자기 새로운 방법 doAnother을 추가해야이 인터페이스 (). 이 시점에서, 모든 우리는이 두 가지 문제로 이어질 것) 플러스 doAnother (이 인터페이스의 구현의 응용 프로그램에서 달성하고자 첫째, 수정 된 크기 큰 반면, 두 번째는 모든 클래스가 구현해야하지 실현 doAnother () 메소드.

기본 키워드는 해결 등의 문제입니다. 플러스 doAnother () 메소드 전에 기본 키워드는,이 인터페이스의 구현 전에 doAnother () 메소드가 제공되지 않는 인식하지 않습니다. 이 방법의 새로운 구현 클래스의 구현이 클래스의 실현에 해당하는 경우 최종 결과는 자바의 다형성을 실행 줄 수 있도록, 방법을 설명합니다.

 

그러나 권장되지 않습니다 점에 유의 키워드 캐주얼 사용을 기본.

두 개의 인터페이스가있는 가정하자 : InterfaceA 형과는 InterfaceB을 달성하면서 InterfaceA 형과는 InterfaceB을, 그들은 모두 기본 무효 시험 () 메소드, 지금은 클래스 C가 테스트 () 메서드를 호출 때 모호성을 야기하기 때문에 오류가 발생 컴파일러는 테스트 () 메소드의 C 호출 여부를 알 수 없다.

----------------

면책 조항 :이 문서는 CSDN 블로거 원래 기사 "dela_"을, 그리고 BY-SA 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요 CC 4.0을 따릅니다.

원본 링크 : HTTPS : //blog.csdn.net/dela_/article/details/8379477

 

추천

출처www.cnblogs.com/lc0605/p/11771278.html