Antarmuka fungsional ing Jawa yaiku antarmuka sing mung ngemot 1 metode abstrak. Tujuan utama yaiku nggunakake ing ekspresi lambda lan referensi metode.
Anane 1 metode abstrak minangka siji-sijine kondisi, mula antarmuka fungsional uga bisa ngemot
Aku ora bakal manggon ing wong ing rinci. Aku nyathet yen sing paling kerep digunakake yaiku: Konsumen<T> , Fungsi<T,R> , Predikat<T> , Supplier<T> , UnaryOperator<T> lan formulir Bi . Rincian liyane bisa ditemokake ing kaca dokumentasi: Paket java.util.function
default
metode static
. Sampeyan bisa nambah anotasi @FunctionalInterface menyang antarmuka fungsional. Iki ora dibutuhake, nanging yen anotasi iki ana, kode ora bakal kompilasi yen ana luwih utawa kurang saka 1 cara abstrak. Disaranake kanggo nambah @FunctionalInterface. Iki bakal ngidini sampeyan nggunakake antarmuka ing ekspresi lambda tanpa kuwatir yen ana wong sing bakal nambah metode abstrak anyar menyang antarmuka lan bakal mandheg fungsional. Jawa nduweni antarmuka fungsional sing dipasang ing java.util.function
.
Apa maneh sing kudu diwaca: |
---|
import java.util.function.Predicate;
//Определяем свой функциональный интерфейс
@FunctionalInterface
interface MyPredicate {
boolean test(Integer value);
}
public class Tester {
public static void main(String[] args) throws Exception {
MyPredicate myPredicate = x -> x > 0;
System.out.println(myPredicate.test(10)); //true
//Аналогично, но используется встроенный функциональный интерфейс java.util.function.Predicate
Predicate<Integer> predicate = x -> x > 0;
System.out.println(predicate.test(-10)); //false
}
}
Nanging ternyata ana siji titik subtle sing diterangake ing Spesifikasi Basa Jawa: "antarmuka ora entuk warisan saka Obyek, nanging kanthi implisit nyatakake akeh metode sing padha karo Obyek." Iki tegese antarmuka fungsional bisa uga ngemot metode abstrak sing ditetepake ing kelas kasebut Object
. Kode ing ngisor iki bener, ora bakal ana kompilasi utawa kesalahan runtime:
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
// другие default or static методы
}
Ati-ati sajrone wawancara! Sugeng enjang!
GO TO FULL VERSION