JavaRush /Java Blog /Random-ID /Rehat kopi #182. Antarmuka Fungsional di Java

Rehat kopi #182. Antarmuka Fungsional di Java

Dipublikasikan di grup Random-ID
Sumber: DZone Berikut ini ikhtisar antarmuka fungsional di Java: tujuan, contoh, ekspresi lambda, dan daftar antarmuka yang telah ditentukan sebelumnya. Rehat kopi #182.  Antarmuka Fungsional di Java - 1Sebagai bahasa pemrograman berorientasi objek, Java sebelumnya tidak dapat memiliki fungsi independen karena semuanya kecuali beberapa tipe data primitif dan metode dalam bahasa tersebut berkisar pada kelas dan objek. Namun, Java 8 memperkenalkan konsep baru yang disebut Antarmuka Fungsional dan juga beberapa fitur lain seperti Lambda Expressions, Time API, Stream API, dan sebagainya. Apa saja antarmuka fungsional ini dan bagaimana mendefinisikannya? Mari kita cari tahu!

Apa itu antarmuka?

Antarmuka adalah seperangkat aturan yang menentukan interaksi elemen sistem. Ia juga dikenal sebagai garis besar kelas yang berisi metode abstrak dan konstanta statis. Sebuah antarmuka mungkin berisi satu atau lebih metode abstrak. Antarmuka juga memungkinkan Anda menetapkan persyaratan untuk kelas, yaitu metode apa yang diperlukan dari kelas tersebut. Sederhananya, antarmuka ibarat kontrak yang harus dipatuhi oleh setiap kelas pelaksana. Berikut ini contohnya:
Interface A1
{
void method1();
String method2(String X);
}

Class A1 implements A
{
@Override
public void method1(){}
@Override
public String method2(String X) { return x; }
}
Jika kelas yang mengimplementasikan antarmuka tidak mendeklarasikan semua metode antarmuka, kode tidak akan berjalan dan akan menghasilkan kesalahan: “ kesalahan : A1 tidak abstrak dan tidak menimpa metode abstrak di A1. " (kesalahan: A1 tidak abstrak dan tidak menimpa metode abstrak di A1). Sebelum JDK 8, antarmuka tidak dapat menentukan implementasi, tetapi sekarang implementasi default dapat ditambahkan untuk metode antarmuka. Kita juga dapat mendefinisikan metode statis dan default, yang mana dapat memanggil tanpa objek di antarmuka Antarmuka terutama digunakan untuk mencapai pewarisan berganda dan penggandengan longgar dalam kode. Sekarang kita memiliki pemahaman yang jelas tentang antarmuka, mari kita lihat apa itu antarmuka fungsional dan cara kerjanya.

Apa itu antarmuka fungsional?

Antarmuka fungsional juga dikenal sebagai antarmuka Metode Abstrak Tunggal (SAM). Seperti namanya, metode ini dapat mempunyai paling banyak satu metode abstrak. Antarmuka fungsional dapat memiliki beberapa metode statis dan default dengan implementasi, serta metode abstrak tambahan. Untuk menandai antarmuka sebagai berfungsi, anotasi @FunctionalInterface digunakan . Hal ini diperlukan untuk menghindari kesalahan dalam mendeklarasikan metode tambahan. Apa yang membuat antarmuka fungsional begitu populer adalah kemampuannya menggunakan ekspresi lambda untuk membuat antarmuka tanpa menggunakan implementasi kelas yang anonim dan rumit. Penggunaan kata kunci abstrak dalam antarmuka fungsional bersifat opsional karena metode yang ditentukan dalam antarmuka bersifat abstrak secara default.

Apa ekspresi lambda?

Ekspresi lambda adalah metode tanpa nama atau anonim yang tidak dijalankan sendiri, tetapi digunakan untuk mengimplementasikan metode tertentu pada antarmuka fungsional. Ini didefinisikan sebagai berikut:
(parameter list) -> lambda body
Operator panah ( -> ) yang Anda lihat dalam kode dikenal sebagai operator lambda. Misalnya, jika kita memiliki metode berikut:
double getGoldenRatioValue() {
return 1.61803;
}
Dengan menggunakan ekspresi lambda, kita dapat menulisnya seperti ini:
() -> 1.61803
Seperti yang Anda lihat, metode dalam fungsi lambda tidak memiliki parameter, sehingga sisi kiri pernyataan kosong. Karena sisi kanan menentukan tindakan, dalam contoh ini akan mengembalikan nilai rasio emas: 1,61803. Sebelum Java 8, mengimplementasikan antarmuka atau membuat objek kelas dalam sangatlah penting, tetapi dengan Java 8, yang perlu kita lakukan sekarang hanyalah menetapkan ekspresi lambda ke antarmuka fungsional.

Contoh antarmuka fungsional

Untuk membuat antarmuka fungsional, Anda dapat menggunakan anotasi @FunctionalInterface atau menggunakan antarmuka fungsional Java yang telah ditentukan sebelumnya.

Contoh 1

  • Pertama, kita akan memberi tag @FunctionalInterface dan membuat antarmuka bernama MyInterface yang dipanggil dengan metode abstrak getGoldenRationValue() .
  • Kemudian kita akan membuat kelas publik main untuk mengeksekusi metode tersebut.
  • Untuk menggunakan ekspresi lambda dalam antarmuka fungsional, kami akan mendeklarasikan referensi ke MyInterfaceDemo dan kemudian menetapkan ekspresi lambda ke referensi tersebut.
  • Terakhir, kami akan mencetak nilai rasio emas menggunakan antarmuka referensi.
import java.lang.FunctionalInterface;

// Creation и маркировка функционального интерфейса
@FunctionalInterface

interface MyInterface {
// Это абстрактный метод
double getGoldenRatioValue();
}

public class Main {
public static void main( String[] args ) {

//декларируем ссылку на функциональный интерфейс
MyInterface ref;
//используем Lambda Expression
ref = () -> 1.61803;

System.out.println("Value of Golden Ratio = " + ref.getGoldenRatioValue());
}
}
Kesimpulan:
Nilai Golden Ratio = 1,61803

Contoh 2

  • Dalam contoh ini, kita akan menggunakan antarmuka fungsi yang telah ditentukan sebelumnya ToDoubleFunction , yang mengambil argumen T dan mengembalikan double sebagai output.
  • ToDoubleFuntion berisi metode abstrak yang disebut applyasDouble() .
  • Terakhir, kami mencetak seluruh panjang pesan, termasuk spasi.
import java.util.function.ToDoubleFunction;
public class MyInterface2 {

public static void main(String[] args) {

ToDoubleFunction<String> length = x -> x.length();

System.out.println(length.applyAsDouble("This is an example of predefined functional interface."));
}
}
Kesimpulan:
54.0

Daftar antarmuka fungsional yang sudah diinstal sebelumnya

Sekarang setelah kita mengetahui cara mendefinisikan antarmuka fungsional, mari kita lihat berapa banyak antarmuka fungsional yang telah ditentukan sebelumnya (bawaan). Ada 4 tipe utama antarmuka fungsional yang dapat diimplementasikan dalam situasi berbeda: Konsumen , Predikat , Fungsi , dan Pemasok . Di antara keempat antarmuka ini, Konsumen , Fungsi , dan Predikat memiliki antarmuka fungsi tambahan. Berikut adalah daftar semua antarmuka bawaan atau yang telah ditentukan sebelumnya di Java. Catatan. T, U dan R yang disebutkan dalam tabel di bawah mewakili tipe argumen pertama (T), argumen kedua (U) dan hasil (R) dari operasi tersebut.
Antarmuka Jenis
Dapat dijalankan
BiKonsumen(T, U) T, kamu →
BiFungsi (T, U, R) T, kamu → R
Operator Biner T, T <→ R
BiPredikat<T, U> T, U → boolean
Pemasok Boolean → boolean
Konsumen T →
Operator Biner Ganda ganda, ganda → ganda
Konsumen Ganda ganda →
Fungsi Ganda ganda → R
Predikat Ganda ganda → boolean
Pemasok Ganda boolean →
Fungsi GandaToInt ganda → ke dalam
Fungsi GandaKePanjang ganda → panjang
Operator Unary Ganda ganda → ganda
Fungsi<T, R> T → R
Operator IntBinary ke dalam → ke dalam
Konsumen Int ke dalam →
Fungsi Int ke dalam → R
Predikat Int int → boolean
Pemasok Int → ke dalam
Fungsi IntToDouble ke dalam → ganda
Fungsi IntToLong int → panjang
Operator IntUnary ke dalam → ke dalam
Operator Biner Panjang panjang, panjang → panjang
Konsumen Panjang panjang →
Fungsi Panjang panjang → R
Predikat Panjang panjang →
Pemasok Panjang → panjang
Fungsi PanjangKeDouble panjang → ganda
Fungsi LongToInt panjang → int
Operator Unary Panjang panjang → panjang
ObjDoubleConsumer T, ganda →
ObjIntConsumer T, ke dalam →
ObjLongConsumer T, panjang →
Predikat T → boolean
Pemasok → T
KeDoubleBiFunction<T, U> T, U → ganda
KeFungsi Ganda T → ganda
KeIntBiFunction<T, U> T, kamu → ke dalam
KeIntFungsi T → ke dalam
KeLongBiFunction<T, U> T, U → panjang
KeFungsi Panjang T → panjang
Operator Unary T → T

Mari kita simpulkan

Beberapa hal penting yang perlu diingat dari posting ini:
  • Antarmuka berfungsi sebagai mekanisme abstraksi.
  • Antarmuka fungsional dapat memiliki beberapa metode statis dan default dengan implementasi, serta metode abstrak tambahan.
  • Metode yang didefinisikan di dalam antarmuka fungsional bersifat abstrak secara default, jadi penggunaan kata kunci abstract tidak lagi diperlukan.
  • Ekspresi lambda adalah metode anonim yang tidak dijalankan sendiri, tetapi digunakan untuk mengimplementasikan metode tertentu pada antarmuka fungsional.
  • Untuk membuat antarmuka fungsional, Anda dapat menggunakan anotasi @FunctionalInterface atau menggunakan antarmuka fungsional Java yang telah ditentukan sebelumnya.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION