JavaRush /Java Blog /Random-TK /Funksiýa interfeýslerine giriş
minuteman
Dereje

Funksiýa interfeýslerine giriş

Toparda çap edildi
Gaty kän yzarlamaň, men diňe makalalary terjime edip başlaýaryn Funksiýa interfeýslerine giriş - 1

Funksiýa interfeýsleri bilen tanyşlyk - Java 8-de döredilen düşünjeler

Dünýädäki her bir Java dörediji iň bolmanda bir gezek aşakdaky interfeýslerden birini ulandy : java.lang.Runnable,,, . Olaryň hemmesiniň umumy bir zady bar we olaryň hemmesiniň diňe bir usuly bar. JDK-da, Java döredijiler tarapyndan döredilen beýlekiler ýaly başga-da köp interfeýs bar. Bu interfeýsler (SAM interfeýsleri) hem bellidir . Bu interfeýsleri ulanmagyň iň meşhur usullaryndan biri, aşakdaky mysaldaky ýaly bu interfeýsleri ulanýan näbelli içki synplary döretmekdir: java.awt.event.ActionListenerjava.util.Comparatorjava.util.concurrent.CallableSingle Abstract Method interfaces
public class AnonymousInnerClassTest {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("A thread created and running...");
            }
        }).start();
    }
}
Java 8-de SAM düşünjesi döredilýär we funksional interfeýsler diýilýär. Olary lambda aňlatmalary, usul salgylanmalary we salgylanma konstruktorlary arkaly görkezip bolýar. Täze @FunctionalInterface düşündiriş döredildi, bellik eden interfeýsiňiz funksiýa derejesinde işlemese, düzüjiniň derejesinde ýalňyşlyklary taşlamak üçin ulanylýar. Bir abstrakt usul bilen ýönekeý funksional interfeýsine seredeliň:
@FunctionalInterface
public interface SimpleFunInterface {
    public void doWork();
}
Interfeýs synpdan abstrakt usullary hem yglan edip biler java.lang.Object, ýöne bu ýagdaýda interfeýsiň işleýşi hem yglan edilip bilner:
@FunctionalInterface
public interface SimpleFuncInterface {
    public void doWork();
    public String toString();
    public Boolean equals(Object o);
}
Interfeýsde başga bir abstrakt usuly goşanyňyzdan soň, IDE ony suratdaky ýaly ýalňyş bellär: Funksiýa interfeýslerine giriş - 2 Interfeýs başga bir interfeýsden miras alyp biler; eger interfeýs işleýän interfeýsden miras galan we täze abstrakt usullary öz içine almasa, bu interfeýs hem işleýär. Anöne interfeýsde diňe bir abstrakt usul we köp sanly usul bolup biler we ol henizem işleýär.
@FunctionalInterface
public interface ComplexFunctionalInterface extends SimpleFuncInterface {
    default public void doSomeWork() {
        System.out.println("Doing some work in interface impl...");
    }
    default public void doSomeWork() {
        System.out.println("Doing some other work in interface impl...");
    }
}
Iň ýokary mysal henizem işleýän interfeýsdir. Indi, funksional interfeýsleri amala aşyrmak üçin näbelli içki synpy çalyşmak üçin lambda aňlatmalaryny nädip ulanyp boljakdygyna seredeliň:
/*
*Implementation the interface by creating an
*anonymoous inner class versus using
*lambda expression.
*/
public class SimpleFunInterfaceTest {
    public static void main(String[] args) {
        carryOutWork(new SimpleFunInterface() {
            @Override
            public void doWork() {
                System.out.println("Do work in SimpleFun impl...");
            }
        });
        carryOutWork(() -> System.out.println("Do work in lambda exp impl..."));
    }
    public static void carryOutWork(SimpleFuncInterface sfi) {
        sfi.work();
    }
}
Maksatnamanyň netijesi şeýle bolar:
Do work in SimpleFun impl...
Do work in lambda exp impl...
Java lambda aňlatma sintaksisini goldaýan IDE ulanýan bolsaňyz (Netbeans 8 Nightly builds) - Anonim içki synplary ulananyňyzda bir maslahat alarsyňyz: Funksiýa interfeýslerine giriş - 3 Bu Java 8-de funksional interfeýsler düşünjesi we olary durmuşa geçirip boljakdygy barada gysgaça maglumat. lambda aňlatmalaryny ulanmak.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION