JavaRush /Java Blog /Random-TW /Java函數式介面
Алексей
等級 32

Java函數式介面

在 Random-TW 群組發布
Java 中的函數式介面是僅包含 1 個抽象方法的介面。主要目的是在 lambda 表達式和方法引用中使用它。
Java 函數式介面 - 1
存在 1 個抽象方法是唯一的條件,因此函數式介面也可以包含default方法static。您可以將@FunctionalInterface註解新增至函數式介面。這不是必需的,但如果存在此註釋,且抽象方法多於或少於 1 個,則程式碼將無法編譯。建議添加@FunctionalInterface。這將允許您在 lambda 表達式中使用接口,而不必擔心有人向接口添加新的抽象方法並且接口將不再起作用。Java 具有內建的函數接口,位於java.util.function. 我不會詳細討論它們。我注意到最常用的是: Consumer<T>Function<T,R>Predicate<T>Supplier<T>UnaryOperator<T>及其Bi形式。更多詳細資訊可以在文件頁面上找到:Package 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