84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
函数接口中有一个 and() 方法,源码如下
and()
default Predicate<T> 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
1
bool
Predicate
@捏造的信仰 和 @YaTou 都说了,返回的是一个 Lambda,符合 Predicate<T> 的定义。
Predicate<T>
我只想说,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<T>
的定义。我只想说,Predicate 为什么会翻译成“谓词”,虽然它有“谓语”这个意思,但是在这里用的是它的另一个意思“断言,断定(自然语言中用断定比较好懂,但开发技术书一般称为断言)”,用于判断某个东西,得到 true 或 false 的结果——也就是断定为真,或断定为假
确实源码是没有问题的,是我自己现在入为主了,将
(t) -> test(t)
当做一个整体了,其实应该test(t) && other.test(t)
是一个整体,谢谢 @捏造的信仰 和 @YaTou 的回答以及边城大大的提醒