JavaRush /Java Blog /Random-KO /Java 기능 인터페이스
Алексей
레벨 32

Java 기능 인터페이스

Random-KO 그룹에 게시되었습니다
Java의 기능적 인터페이스는 1개의 추상 메소드만 포함하는 인터페이스입니다. 주요 목적은 람다 식 및 메서드 참조에 사용하는 것입니다.
Java 기능 인터페이스 - 1
1개의 추상 메소드가 존재하는 것이 유일한 조건이므로 기능적 인터페이스에는 default메소드 도 포함될 수 있습니다 static. 기능적 인터페이스에 @FunctionalInterface 주석을 추가할 수 있습니다. 이는 필수는 아니지만 이 주석이 있는 경우 추상 메서드가 1개 이상이거나 적으면 코드가 컴파일되지 않습니다. @FunctionalInterface를 추가하는 것이 좋습니다. 이렇게 하면 누군가가 인터페이스에 새로운 추상 메서드를 추가하여 작동이 중단될 것을 걱정하지 않고 람다 식에서 인터페이스를 사용할 수 있습니다. Java에는 java.util.function. 나는 그것들에 대해 자세히 설명하지 않을 것입니다. 가장 자주 사용되는 형식은 Consumer<T> , Function<T,R> , Predicate<T> , Supply<T> , UnaryOperator<T> 및 해당 Bi 형식입니다. 자세한 내용은 설명서 페이지( 패키지 java.util.function) 에서 확인할 수 있습니다.
import java.util.function.Predicate;

//Определяем свой функциональный интерфейс
@FunctionalInterface
interface MyPredicate {
    boolean test(Integer value);
}

public class Tester {
    public static void main(String[] args) throws Exception {
        MyPredicate myPredicate = x -> x > 0;
        System.out.println(myPredicate.test(10));   //true

        //Аналогично, но используется встроенный функциональный интерфейс java.util.function.Predicate
        Predicate<Integer> predicate = x -> x > 0;
        System.out.println(predicate.test(-10));    //false
    }
}
그러나 Java 언어 사양에는 "인터페이스가 Object에서 상속되지 않고 암시적으로 Object와 동일한 메서드 중 다수를 선언합니다"라는 미묘한 점이 설명되어 있습니다. 이는 기능적 인터페이스가 클래스에 정의된 추상 메소드를 추가로 포함할 수 있음을 의미합니다 Object. 아래 코드는 유효하며 컴파일 또는 런타임 오류가 없습니다.
@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default or static методы
}
면접시 주의하세요! 행운을 빌어요!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION