JavaRush /Java Blog /Random-JA /Java 関数インターフェース
Алексей
レベル 32

Java 関数インターフェース

Random-JA グループに公開済み
Java の関数型インターフェイスは、抽象メソッドを 1 つだけ含むインターフェイスです。主な目的は、ラムダ式とメソッド参照で使用することです。
Java 関数インターフェイス - 1
1 つの抽象メソッドの存在が唯一の条件であるため、関数型インターフェイスにはdefaultメソッドを含めることもできますstatic。@FunctionalInterface アノテーションを関数インターフェースに追加できます。これは必須ではありませんが、このアノテーションが存在する場合、抽象メソッドが 1 つより多いか少ない場合、コードはコンパイルされません。@FunctionalInterface を追加することをお勧めします。これにより、誰かがインターフェイスに新しい抽象メソッドを追加して機能しなくなることを心配することなく、ラムダ式でインターフェイスを使用できるようになります。Java には、 に格納された関数型インターフェイスが組み込まれていますjava.util.function それらについては詳しく説明しません。最も頻繁に使用されるのは、 Consumer<T>Function<T,R>Predicate<T>Supplier<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 と暗黙的に宣言する」という微妙な点が 1 つあることがわかりました。これは、関数型インターフェイスには、クラスで定義された抽象メソッドを追加で含めることができることを意味します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