簡體   English   中英

Java 謂詞接口 - 該方法如何工作 - 雖然它沒有在我的 class 中實現

[英]Java Predicate Interface - How the method is working - Though it is not implemented in my class

雖然我還沒有實現 Predicate 接口中的方法 - 測試,但為什么在我的 class - inte 中沒有任何主體執行該方法?

package newone; 
import java.util.function.Predicate;

public class inte {
    public static void main(String[] args) {
        Predicate <Integer> p = i -> (i<19);
        System.out.println(  p.test(22));
       }


@FunctionalInterface
public interface Predicate<T> {
    boolean test(T var1);
}

雖然我還沒有實現該方法 - 測試

您擁有 lambda 表達式:

Predicate <Integer> p = i -> (i<19);

主要是

Predicate<Integer> p = new Predicate<Integer>() {
    @Override
    public boolean test(Integer i) {
        return i < 19;
    }
};

字節碼中的具體細節略有不同,但在大多數情況下,您可以將 lambda 表達式視為創建匿名內部 class 的簡寫。 編譯器能夠執行其他技巧以避免在現實中創建額外的類,至少在某些情況下 - 這取決於您的 lambda 表達式的作用。

較新的編譯器1 ,從版本 8(我相信)開始,在代碼中添加一個(合成)方法,主要是

public class Inte {
    public static void main(String[] args) {
        Predicate<Integer> p = Inte::lambda$test$1;
        ...
    }
    // synthetic
    private static boolean lambda$test$1(Integer i) {
        return i < 19;
    }
}

1 - 或者,在 Java 版本 8 之前,可以添加一個額外的 class 實現接口(如匿名類)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM