Rumah > Soal Jawab > teks badan
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? ? ?
滿天的星座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);
};
给我你的怀抱2017-06-23 09:16:14
Yang dipulangkan bukan boolean
, 而是(t) -> { return true|false; }
, 表示返回一个functional interface
, 这个functional interface
是什么根据上下文确定, 只要是接受参数是1
个并且返回值是bool
都可以, 在Predicate
中就是functional interface
自己, 因为方法规定了返回值是Predicate
.
某草草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
三叔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.