java - soalan kod sumber antara muka fungsi predikat JDK8 (Predikat)?
迷茫
迷茫 2017-06-23 09:14:14
0
4
973

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? ? ?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(4)
滿天的星座

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);
};
给我你的怀抱

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

某草草

@ 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

三叔

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan