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 &&
与boolean
Operasi logik pada nilai jenis boleh mengembalikan objek predikat? ? ?
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: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.