84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
函數介面中有一個and()方法,原始碼如下
and()
default Predicate and(Predicate super T> other) { Objects.requireNonNull(other); return (t) -> test(t) && other.test(t); }
另外,test()原始碼如下
test()
boolean test(T t);
疑問就是為什麼&&與boolean類型值做邏輯運算可以回傳一個謂詞物件? ? ?
&&
boolean
业精于勤,荒于嬉;行成于思,毁于随。
我不知道什麼叫謂詞對象,但test(t) && other.test(t)這就是一個普通的 boolean 表達式,返回的就是一個 boolean 的值,不是什麼 “謂詞對象”。整條 return 語句其實是下面語句的簡寫:
test(t) && other.test(t)
return (t) -> { return test(t) && other.test(t); };
回傳的不是boolean, 而是(t) -> { return true|false; }, 表示回傳一個functional interface,, 這個functional interface 只要是接受是什麼根據上下文確定是什麼根據上下文1個且回傳值是bool都可以, 在Predicate中就是functional interface自己, 因為方法規定了回傳值是Predicate.
(t) -> { return true|false; }
functional interface,, 這個
個且回傳值是
都可以, 在
中就是
自己, 因為方法規定了回傳值是
.
@捏造的信仰 和 @YaTou 都說了,返回的是一個 Lambda,符合Predicate 的定義。
Predicate
我只想說,Predicate 為什麼會翻譯成“謂詞”,雖然它有“謂語”這個意思,但是在這裡用的是它的另一個意思“斷言,斷定(自然語言中用斷定比較好懂,但開發技術書一般稱為斷言)”,用於判斷某個東西,得到true 或false 的結果——也就是斷定為真,或斷定為假
確實源碼是沒有問題的,是我自己現在入為主了,將(t) -> test(t)當做一個整體了,其實應該test(t) && other.test(t)是一個整體,謝謝@捏造的信仰和@YaTou 的回答以及邊城大大的提醒
(t) -> test(t)
我不知道什麼叫謂詞對象,但
test(t) && other.test(t)
這就是一個普通的 boolean 表達式,返回的就是一個 boolean 的值,不是什麼 “謂詞對象”。整條 return 語句其實是下面語句的簡寫:回傳的不是
boolean
, 而是(t) -> { return true|false; }
, 表示回傳一個functional interface,, 這個
functional interface 只要是接受是什麼根據上下文確定是什麼根據上下文1個且回傳值是
bool都可以, 在
Predicate中就是
functional interface自己, 因為方法規定了回傳值是
Predicate.
@捏造的信仰 和 @YaTou 都說了,返回的是一個 Lambda,符合
Predicate
的定義。我只想說,Predicate 為什麼會翻譯成“謂詞”,雖然它有“謂語”這個意思,但是在這裡用的是它的另一個意思“斷言,斷定(自然語言中用斷定比較好懂,但開發技術書一般稱為斷言)”,用於判斷某個東西,得到true 或false 的結果——也就是斷定為真,或斷定為假
確實源碼是沒有問題的,是我自己現在入為主了,將
(t) -> test(t)
當做一個整體了,其實應該test(t) && other.test(t)
是一個整體,謝謝@捏造的信仰和@YaTou 的回答以及邊城大大的提醒