JavaRush /Blog Java /Random-MS /Coffee break #182. Antara Muka Fungsian dalam Java

Coffee break #182. Antara Muka Fungsian dalam Java

Diterbitkan dalam kumpulan
Sumber: DZone Berikut ialah gambaran keseluruhan antara muka berfungsi dalam Java: tujuan, contoh, ungkapan lambda dan senarai antara muka yang dipratentukan. Coffee break #182.  Antara Muka Fungsian dalam Java - 1Sebagai bahasa pengaturcaraan berorientasikan objek, Java sebelum ini tidak boleh mempunyai fungsi bebas kerana segala-galanya kecuali beberapa jenis data dan kaedah primitif dalam bahasa itu berkisar pada kelas dan objek. Walau bagaimanapun, Java 8 memperkenalkan konsep baharu yang dipanggil Antara Muka Fungsian dan juga beberapa ciri lain seperti Lambda Expressions, Time API, Stream API dan sebagainya. Apakah antara muka berfungsi ini dan bagaimana untuk menentukannya? Jom ketahui!

Apakah antara muka?

Antara muka ialah satu set peraturan yang menentukan interaksi elemen sistem. Ia juga dikenali sebagai garis besar kelas yang mengandungi kaedah abstrak dan pemalar statik. Antara muka mungkin mengandungi satu atau lebih kaedah abstrak. Antara muka juga membolehkan anda menetapkan keperluan untuk kelas, iaitu kaedah yang diperlukan daripada kelas. Ringkasnya, antara muka adalah seperti kontrak yang mesti dipatuhi oleh setiap kelas pelaksana. Berikut ialah contoh:
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 melaksanakan antara muka tidak mengisytiharkan semua kaedah antara muka, kod tidak akan dijalankan dan akan menghasilkan ralat: “ ralat : A1 bukan abstrak dan tidak mengatasi kaedah abstrak dalam A1. " (ralat: A1 bukan abstrak dan tidak mengatasi kaedah abstrak dalam A1). Sebelum JDK 8, antara muka tidak dapat mentakrifkan pelaksanaan, tetapi kini pelaksanaan lalai boleh ditambah untuk kaedah antara muka. Kami juga boleh menentukan kaedah statik dan lalai, yang boleh memanggil tanpa objek dalam antara muka Antara muka digunakan terutamanya untuk mencapai pelbagai warisan dan gandingan longgar dalam kod. Sekarang kita mempunyai pemahaman yang jelas tentang antara muka, mari kita lihat apakah antara muka berfungsi dan cara ia berfungsi.

Apakah antara muka berfungsi?

Antara muka berfungsi juga dikenali sebagai antara muka Kaedah Abstrak Tunggal (SAM). Seperti namanya, ia boleh mempunyai paling banyak satu kaedah abstrak. Antara muka berfungsi boleh mempunyai beberapa kaedah statik dan lalai dengan pelaksanaan, serta kaedah abstrak tambahan. Untuk menandakan antara muka sebagai berfungsi, anotasi @FunctionalInterface digunakan . Ia diperlukan untuk mengelakkan kesilapan mengisytiharkan kaedah tambahan. Apa yang menjadikan antara muka berfungsi begitu popular ialah keupayaan untuk menggunakan ungkapan lambda untuk mencipta antara muka tanpa menggunakan pelaksanaan kelas tanpa nama dan menyusahkan. Penggunaan kata kunci abstrak dalam antara muka berfungsi adalah pilihan kerana kaedah yang ditakrifkan dalam antara muka adalah abstrak secara lalai.

Apakah ungkapan lambda?

Ungkapan lambda ialah kaedah tanpa nama atau tanpa nama yang tidak dilaksanakan sendiri, tetapi digunakan untuk melaksanakan kaedah tertentu antara muka berfungsi. Ia ditakrifkan seperti berikut:
(parameter list) -> lambda body
Operator anak panah ( -> ) yang anda lihat dalam kod dikenali sebagai operator lambda. Sebagai contoh, jika kita mempunyai kaedah berikut:
double getGoldenRatioValue() {
return 1.61803;
}
Menggunakan ungkapan lambda, kita boleh menulisnya seperti ini:
() -> 1.61803
Seperti yang anda lihat, kaedah dalam fungsi lambda tidak mempunyai parameter, jadi bahagian kiri pernyataan itu kosong. Oleh kerana sebelah kanan menentukan tindakan, dalam contoh ini ia akan mengembalikan nilai nisbah emas: 1.61803. Sebelum Java 8, melaksanakan antara muka atau mencipta objek kelas dalaman adalah penting, tetapi dengan Java 8, semua yang perlu kita lakukan sekarang ialah menetapkan ungkapan lambda kepada antara muka berfungsi.

Contoh antara muka berfungsi

Untuk mencipta antara muka berfungsi, anda boleh sama ada menggunakan anotasi @FunctionalInterface atau menggunakan antara muka fungsi yang dipratentukan Java.

Contoh 1

  • Mula-mula, kami akan menandai @FunctionalInterface dan mencipta antara muka yang dipanggil MyInterface yang dipanggil oleh kaedah abstrak getGoldenRationValue() .
  • Kemudian kami akan mencipta kelas utama awam untuk melaksanakan kaedah tersebut.
  • Untuk menggunakan ungkapan lambda dalam antara muka berfungsi, kami akan mengisytiharkan rujukan kepada MyInterfaceDemo dan kemudian menetapkan ungkapan lambda kepada rujukan itu.
  • Akhir sekali, kami akan mencetak nilai nisbah emas menggunakan antara muka rujukan.
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 Nisbah Emas = 1.61803

Contoh 2

  • Dalam contoh ini, kita akan menggunakan antara muka fungsi yang telah ditetapkan ToDoubleFunction , yang mengambil hujah T dan mengembalikan dua kali ganda sebagai output.
  • ToDoubleFuntion mengandungi kaedah abstrak yang dipanggil applyasDouble() .
  • Akhir sekali, kami mencetak keseluruhan panjang mesej, termasuk ruang.
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

Senarai antara muka berfungsi yang diprapasang

Sekarang setelah kita tahu cara untuk mentakrifkan antara muka berfungsi, mari kita lihat berapa banyak antara muka fungsi pratakrif (terbina dalam) yang ada. Terdapat 4 jenis utama antara muka berfungsi yang boleh dilaksanakan dalam situasi yang berbeza: Pengguna , Predikat , Fungsi dan Pembekal . Antara empat antara muka ini, Pengguna , Fungsi dan Predikat mempunyai antara muka fungsi tambahan. Berikut ialah senarai semua antara muka terbina dalam atau pratakrif dalam Java. Catatan. T, U dan R yang disebut dalam jadual di bawah mewakili jenis argumen pertama (T), argumen kedua (U) dan hasil (R) operasi masing-masing.
Antara muka taip
Boleh dijalankan
BiConsumer(T, U) T, U →
BiFunction(T, U, R) T, U → R
BinaryOperator T, T <→ R
BiPredicate<T, U> T, U → boolean
BooleanPembekal → boolean
Pengguna T →
DoubleBinaryOperator ganda, ganda → ganda
DoubleConsumer berganda →
DoubleFunction ganda → R
DoublePredicate double → boolean
DoublePembekal boolean →
DoubleToIntFunction ganda → int
DoubleToLongFunction ganda → panjang
DoubleUnaryOperator ganda → ganda
Fungsi<T, R> T → R
IntBinaryOperator int → int
IntConsumer int →
IntFunction int → R
IntPredicate int → boolean
IntPembekal → int
IntToDoubleFunction int → ganda
IntToLongFunction int → panjang
IntUnaryOperator int → int
LongBinaryOperator panjang, panjang → panjang
Pengguna Lama panjang →
LongFunction panjang → R
LongPredikat panjang →
Pembekal Panjang → panjang
LongToDoubleFunction panjang → ganda
LongToIntFunction panjang → int
LongUnaryOperator panjang → panjang
ObjDoubleConsumer T, ganda →
ObjIntConsumer T, int →
ObjLongConsumer T, panjang →
Predikat T → boolean
Pembekal → T
ToDoubleBiFunction<T, U> T, U → dua kali ganda
ToDoubleFunction T → ganda
ToIntBiFunction<T, U> T, U → int
ToIntFunction T → int
ToLongBiFunction<T, U> T, U → panjang
ToLongFunction T → panjang
UnaryOperator T → T

Mari kita ringkaskan

Beberapa perkara penting yang perlu diingati daripada siaran ini:
  • Antara muka berfungsi sebagai mekanisme abstraksi.
  • Antara muka berfungsi boleh mempunyai beberapa kaedah statik dan lalai dengan pelaksanaan, serta kaedah abstrak tambahan.
  • Kaedah yang ditakrifkan dalam antara muka berfungsi adalah abstrak secara lalai, jadi menggunakan kata kunci abstrak tidak lagi diperlukan.
  • Ungkapan lambda ialah kaedah tanpa nama yang tidak dilaksanakan sendiri, tetapi digunakan untuk melaksanakan kaedah tertentu antara muka berfungsi.
  • Untuk mencipta antara muka berfungsi, anda boleh sama ada menggunakan anotasi @FunctionalInterface atau menggunakan antara muka fungsi yang dipratentukan Java.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION