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
1
bool
Predicate
@捏造的信仰 和 @YaTou 都说了,返回的是一个 Lambda,符合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 的回答以及边城大大的提醒