cari

Rumah  >  Soal Jawab  >  teks badan

java - soalan kod sumber antara muka fungsi predikat JDK8 (Predikat)?

Terdapat kaedah and() dalam antara muka fungsi, kod sumber adalah seperti berikut

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

Selain itu, test()Kod sumber adalah seperti berikut

boolean test(T t);

Persoalannya ialah mengapa &&booleanOperasi logik pada nilai jenis boleh mengembalikan objek predikat? ? ?

迷茫迷茫2717 hari yang lalu958

membalas semua(4)saya akan balas

  • 滿天的星座

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

    Saya tidak tahu apa itu objek predikat, tetapi test(t) && other.test(t) Ini ialah ungkapan boolean biasa, dan ia mengembalikan nilai boolean, bukan "objek predikat". Keseluruhan penyata pulangan sebenarnya adalah singkatan kepada pernyataan berikut:

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

    balas
    0
  • 给我你的怀抱

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

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

    balas
    0
  • 某草草

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

    @ Fabricated Faith dan @YaTou kedua-duanya mengatakan bahawa apa yang dikembalikan adalah Lambda, yang memenuhi definisi Predicate<T>.

    Saya cuma ingin menyatakan mengapa Predikat diterjemahkan sebagai "predikat". Walaupun ia mempunyai maksud "predikat", ia digunakan di sini dengan maksud lain "penegasan, penegasan (lebih mudah difahami menggunakan penegasan dalam bahasa semula jadi, tetapi). Buku teknikal pembangunan biasanya dipanggil penegasan)", yang digunakan untuk menilai sesuatu dan mendapatkan hasil yang benar atau salah - iaitu, ia dinilai sebagai benar atau ia dinilai sebagai palsu

    balas
    0
  • 三叔

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

    Memang tidak ada masalah dengan kod sumber saya bertanggungjawab sekarang dan akan (t) -> test(t)当做一个整体了,其实应该 test(t) && other.test(t) Terima kasih @fabricatedbelief dan @YaTou atas jawapan mereka dan peringatan besar Biancheng.

    balas
    0
  • Batalbalas