JavaRush /Blog Jawa /Random-JV /Ngopi #182. Antarmuka Fungsional ing Jawa

Ngopi #182. Antarmuka Fungsional ing Jawa

Diterbitake ing grup
Sumber: DZone Punika ringkesan antarmuka fungsional ing Jawa: tujuan, conto, ekspresi lambda lan dhaptar antarmuka sing wis ditemtokake. Ngopi #182.  Antarmuka Fungsional ing Jawa - 1Minangka basa pamrograman berorientasi obyek, Jawa sadurunge ora bisa nduweni fungsi independen amarga kabeh kajaba sawetara jinis data lan metode primitif ing basa kasebut ngubengi kelas lan obyek. Nanging, Java 8 ngenalake konsep anyar sing diarani Antarmuka Fungsional lan uga sawetara fitur liyane kaya Lambda Expressions, Time API, Stream API lan liya-liyane. Apa antarmuka fungsional iki lan kepiye carane nemtokake? Ayo goleki!

Apa antarmuka?

Antarmuka minangka sakumpulan aturan sing nemtokake interaksi unsur sistem. Iki uga dikenal minangka outline kelas sing ngemot metode abstrak lan konstanta statis. Antarmuka bisa ngemot siji utawa luwih cara abstrak. Antarmuka uga ngidini sampeyan nyetel syarat kanggo kelas, yaiku, metode apa sing dibutuhake saka kelas kasebut. Cukup, antarmuka kaya kontrak sing kudu ditindakake saben kelas pelaksana. Iki contone:
Interface A1
{
void method1();
String method2(String X);
}

Class A1 implements A
{
@Override
public void method1(){}
@Override
public String method2(String X) { return x; }
}
Yen kelas sing ngleksanakake antarmuka ora ngumumake kabeh cara antarmuka, kode kasebut ora bakal mbukak lan bakal ngasilake kesalahan: " kesalahan: A1 ora abstrak lan ora ngilangi metode abstrak ing A1. " (kesalahan: A1 ora abstrak lan ora ngilangi metode abstrak ing A1). Sadurunge JDK 8, antarmuka ora bisa nemtokake implementasine, nanging saiki implementasi standar bisa ditambahake kanggo metode antarmuka. Kita uga bisa nemtokake cara statis lan standar, sing bisa nelpon tanpa obyek ing antarmuka Antarmuka sing utamané dipigunakaké kanggo entuk sawetara warisan lan kopling ngeculke ing kode. Saiki kita duwe pangerten cetha saka antarmuka, ayo kang ndeleng apa antarmuka fungsi lan cara kerjane.

Apa antarmuka fungsional?

Antarmuka fungsional uga dikenal minangka antarmuka Metode Abstrak Tunggal (SAM). Minangka jeneng tabet, bisa duwe paling siji cara abstrak. Antarmuka fungsional bisa duwe sawetara metode statis lan standar kanthi implementasine, uga metode abstrak tambahan. Kanggo menehi tandha antarmuka minangka fungsional, anotasi @FunctionalInterface digunakake . Perlu supaya ora salah nyatakake cara tambahan. Sing ndadekake antarmuka fungsional dadi populer yaiku kemampuan kanggo nggunakake ekspresi lambda kanggo nggawe antarmuka tanpa nggunakake implementasi kelas anonim lan rumit. Panganggone tembung kunci abstrak ing antarmuka fungsional opsional amarga metode sing ditetepake ing antarmuka minangka abstrak kanthi standar.

Apa ekspresi lambda?

Ekspresi lambda minangka cara sing ora dijenengi utawa anonim sing ora dieksekusi dhewe, nanging digunakake kanggo ngleksanakake cara tartamtu saka antarmuka fungsional. Iki ditetepake kaya ing ngisor iki:
(parameter list) -> lambda body
Operator panah ( -> ) sing sampeyan deleng ing kode dikenal minangka operator lambda. Contone, yen kita duwe cara ing ngisor iki:
double getGoldenRatioValue() {
return 1.61803;
}
Nggunakake ekspresi lambda, kita bisa nulis kaya iki:
() -> 1.61803
Nalika sampeyan bisa ndeleng, cara ing fungsi lambda ora duwe paramèter, supaya sisih kiwa statement kosong. Wiwit sisih tengen nemtokake tumindak, ing conto iki bakal ngasilake nilai rasio emas: 1.61803. Sadurunge Java 8, ngleksanakake antarmuka utawa nggawe obyek kelas njero penting banget, nanging karo Java 8, sing saiki kudu ditindakake yaiku nemtokake ekspresi lambda menyang antarmuka fungsional.

Conto antarmuka fungsional

Kanggo nggawe antarmuka fungsional, sampeyan bisa nggunakake anotasi @FunctionalInterface utawa nggunakake antarmuka fungsional sing wis ditemtokake Jawa.

Tuladha 1

  • Pisanan, kita bakal menehi tag @FunctionalInterface lan nggawe antarmuka sing diarani MyInterface sing diarani metode getGoldenRationValue() abstrak .
  • Banjur kita bakal nggawe utama kelas umum kanggo nglakokake metode kasebut.
  • Kanggo nggunakake ekspresi lambda ing antarmuka fungsional, kita bakal ngumumake referensi kanggo MyInterfaceDemo banjur nemtokake ekspresi lambda menyang referensi kasebut.
  • Pungkasan, kita bakal nyithak nilai rasio emas nggunakake 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 rasio Golden = 1,61803

Tuladha 2

  • Ing conto iki, kita bakal nggunakake antarmuka fungsi sing wis ditemtokake ToDoubleFunction , sing njupuk argumen T lan ngasilake dobel minangka output.
  • ToDoubleFuntion ngemot metode abstrak sing diarani applyasDouble() .
  • Pungkasan, kita nyithak kabeh dawa pesen, kalebu 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

Dhaptar antarmuka fungsional sing wis diinstal

Saiki kita ngerti carane kanggo nemtokake antarmuka fungsi, ayo kang ndeleng carane akeh sing wis ditemtokake (dibangun ing) antarmuka fungsi ana. Ana 4 jinis utama antarmuka fungsional sing bisa ditindakake ing macem-macem kahanan: Konsumen , Predikat , Fungsi lan Supplier . Antarane papat antarmuka iki, Konsumen , Fungsi lan Predikat duwe antarmuka fungsi tambahan. Iki minangka dhaptar kabeh antarmuka sing wis dibangun utawa wis ditemtokake ing Jawa. Cathetan. T, U lan R sing kasebut ing tabel ing ngisor iki makili jinis argumen pisanan (T), argumen kapindho (U) lan asil (R) saka operasi kasebut.
Antarmuka Jinis
Bisa mlaku
BiConsumer (T, U) T, U →
BiFungsi (T, U, R) T, U → R
BinaryOperator T, T <→ R
BiPredicate <T, U> T, U → boolean
BooleanSupplier → boolean
Konsumen T →
DoubleBinaryOperator dobel, dobel → dobel
DoubleConsumer pindho →
DoubleFungsi pindho → R
DoublePredicate dobel → boolean
DoubleSupplier boolean →
DoubleToIntFunction pindho → int
DoubleToLongFunction pindho → dawa
DoubleUnaryOperator dobel → dobel
Fungsi <T, R> T → R
IntBinaryOperator int → int
IntConsumer int →
IntFunction ing → R
IntPredicate int → boolean
IntSupplier → int
IntToDoubleFunction int → pindho
IntToLongFunction int → dawa
IntUnaryOperator int → int
LongBinaryOperator dawa, dawa → dawa
LongConsumer dawa →
LongFungsi dawa → R
LongPredikat dawa →
LongSupplier → dawa
LongToDoubleFunction dawa → pindho
LongToIntFunction dawa → int
LongUnaryOperator dawa → dawa
ObjDoubleConsumer T, kaping pindho →
ObjIntConsumer T, ing →
ObjLongConsumer T, dawa →
predikat T → boolean
Supplier → T
ToDoubleBiFunction<T, U> T, U → kaping pindho
ToDoubleFunction T → kaping pindho
ToIntBiFunction<T, U> T, U → int
ToIntFunction T → ing
ToLongBiFunction<T, U> T, U → dawa
ToLongFunction T → dawa
UnaryOperator T → T

Ayo padha nyimpulake

Sawetara takeaways penting kanggo elinga saka kiriman iki:
  • Antarmuka dianggo minangka mekanisme abstraksi.
  • Antarmuka fungsional bisa duwe sawetara metode statis lan standar kanthi implementasine, uga metode abstrak tambahan.
  • Cara sing ditetepake ing antarmuka fungsional yaiku abstrak kanthi standar, mula nggunakake tembung kunci abstrak ora perlu maneh.
  • Ekspresi lambda minangka cara anonim sing ora dieksekusi dhewe, nanging digunakake kanggo ngetrapake metode antarmuka fungsional tartamtu.
  • Kanggo nggawe antarmuka fungsional, sampeyan bisa nggunakake anotasi @FunctionalInterface utawa nggunakake antarmuka fungsional sing wis ditemtokake Jawa.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION