首頁  >  問答  >  主體

java - JDK8 謂詞函數介面(Predicate)源碼疑問?

函數介面中有一個 and() 方法,原始碼如下

default Predicate<T> and(Predicate<? super T> other) {
    Objects.requireNonNull(other);
    return (t) -> test(t) && other.test(t);                        
}

另外,test()原始碼如下

boolean test(T t);

疑問就是為什麼 &&boolean類型值做邏輯運算可以回傳一個謂詞物件? ? ?

迷茫迷茫2675 天前929

全部回覆(4)我來回復

  • 滿天的星座

    滿天的星座2017-06-23 09:16:14

    我不知道什麼叫謂詞對象,但 test(t) && other.test(t) 這就是一個普通的 boolean 表達式,返回的就是一個 boolean 的值,不是什麼 “謂詞對象”。整條 return 語句其實是下面語句的簡寫:

    return (t) -> {
        return test(t) && other.test(t);
    };

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-23 09:16:14

    回傳的不是boolean, 而是(t) -> { return true|false; }, 表示回傳一個functional interface,, 這個functional interface 只要是接受是什麼根據上下文確定是什麼根據上下文1個且回傳值是bool都可以, 在Predicate中就是functional interface自己, 因為方法規定了回傳值是Predicate.

    回覆
    0
  • 某草草

    某草草2017-06-23 09:16:14

    @捏造的信仰 和 @YaTou 都說了,返回的是一個 Lambda,符合 Predicate 的定義。

    我只想說,Predicate 為什麼會翻譯成“謂詞”,雖然它有“謂語”這個意思,但是在這裡用的是它的另一個意思“斷言,斷定(自然語言中用斷定比較好懂,但開發技術書一般稱為斷言)”,用於判斷某個東西,得到true 或false 的結果——也就是斷定為真,或斷定為假

    回覆
    0
  • 三叔

    三叔2017-06-23 09:16:14

    確實源碼是沒有問題的,是我自己現在入為主了,將(t) -> test(t)當做一個整體了,其實應該test(t) && other.test(t)是一個整體,謝謝@捏造的信仰和@YaTou 的回答以及邊城大大的提醒

    回覆
    0
  • 取消回覆