Java 8 Interface Fungsional dan Referensi Metode menggunakan ::
operator.
Java 8 mampu mempertahankan referensi metode (MyClass :: baru) dengan " @Functional Interface pointer "@Functional ". Tidak perlu untuk nama metode yang sama, hanya tanda tangan metode yang sama diperlukan.
Contoh:
@FunctionalInterface
interface CallbackHandler{
public void onClick();
}
public class MyClass{
public void doClick1(){System.out.println("doClick1");;}
public void doClick2(){System.out.println("doClick2");}
public CallbackHandler mClickListener = this::doClick;
public static void main(String[] args) {
MyClass myObjectInstance = new MyClass();
CallbackHandler pointer = myObjectInstance::doClick1;
Runnable pointer2 = myObjectInstance::doClick2;
pointer.onClick();
pointer2.run();
}
}
Jadi, apa yang kita miliki di sini?
- Antarmuka Fungsional - ini adalah antarmuka, beranotasi atau tidak dengan @FunctionalInterface , yang hanya berisi satu deklarasi metode.
- Referensi Metode - ini hanya sintaks khusus, terlihat seperti ini, objectInstance :: methodName , tidak lebih tidak kurang.
- Contoh penggunaan - hanya operator penugasan dan kemudian memanggil metode antarmuka.
ANDA HARUS MENGGUNAKAN FUNGSI FUNGSIONAL UNTUK MENDENGARKAN HANYA DAN HANYA UNTUK ITU!
Karena semua fungsi pointer seperti itu benar-benar buruk untuk keterbacaan kode dan kemampuan untuk memahami. Namun, referensi metode langsung terkadang berguna, dengan foreach misalnya.
Ada beberapa Antarmuka Fungsional yang telah ditentukan:
Runnable -> void run( );
Supplier<T> -> T get( );
Consumer<T> -> void accept(T);
Predicate<T> -> boolean test(T);
UnaryOperator<T> -> T apply(T);
BinaryOperator<T,U,R> -> R apply(T, U);
Function<T,R> -> R apply(T);
BiFunction<T,U,R> -> R apply(T, U);
//... and some more of it ...
Callable<V> -> V call() throws Exception;
Readable -> int read(CharBuffer) throws IOException;
AutoCloseable -> void close() throws Exception;
Iterable<T> -> Iterator<T> iterator();
Comparable<T> -> int compareTo(T);
Comparator<T> -> int compare(T,T);
Untuk versi Java yang lebih lama Anda harus mencoba Guava Libraries, yang memiliki fungsi dan sintaksis yang sama, seperti yang telah disebutkan oleh Adrian Petrescu di atas.
Untuk penelitian tambahan, lihat Java 8 Cheatsheet
dan terima kasih kepada The Guy with The Hat untuk Spesifikasi Bahasa Jawa §15.13 tautan.