Heim  >  Fragen und Antworten  >  Hauptteil

java - Frage zum Quellcode der JDK8-Prädikatfunktionsschnittstelle (Prädikat)?

Es gibt eine and() Methode in der Funktionsschnittstelle, der Quellcode lautet wie folgt

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

Darüber hinaus test()Der Quellcode lautet wie folgt

boolean test(T t);

Die Frage ist, warum &&booleanLogische Operationen an Typwerten ein Prädikatobjekt zurückgeben können? ? ?

迷茫迷茫2675 Tage vor931

Antworte allen(4)Ich werde antworten

  • 滿天的星座

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

    我不知道什么叫谓词对象,但 test(t) && other.test(t) 这就是一个普通的 boolean 表达式,返回的就是一个 boolean 的值,不是什么 “谓词对象”。整条 return 语句实际上是下面语句的简写:

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

    Antwort
    0
  • 给我你的怀抱

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

    返回的不是boolean, 而是(t) -> { return true|false; }, 表示返回一个functional interface, 这个functional interface是什么根据上下文确定, 只要是接受参数是1个并且返回值是bool都可以, 在Predicate中就是functional interface自己, 因为方法规定了返回值是Predicate.

    Antwort
    0
  • 某草草

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

    @捏造的信仰 和 @YaTou 都说了,返回的是一个 Lambda,符合 Predicate<T> 的定义。

    我只想说,Predicate 为什么会翻译成“谓词”,虽然它有“谓语”这个意思,但是在这里用的是它的另一个意思“断言,断定(自然语言中用断定比较好懂,但开发技术书一般称为断言)”,用于判断某个东西,得到 true 或 false 的结果——也就是断定为真,或断定为假

    Antwort
    0
  • 三叔

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

    确实源码是没有问题的,是我自己现在入为主了,将 (t) -> test(t)当做一个整体了,其实应该 test(t) && other.test(t)是一个整体,谢谢 @捏造的信仰 和 @YaTou 的回答以及边城大大的提醒

    Antwort
    0
  • StornierenAntwort