Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_callback

< Java

Java Callback

A callback függvényekről

A callback egy olyan függvény, ami paraméterként egy másik függvényt vár.

Egy műveletet, egy függvényt egy másik függvénynek szeretnénk átadni végrehajtásra.

Általában eseménykezelésre, aszinkron műveletekre használjuk.

Runnable osztály

Az alábbi példában, a hívás helyén névtelen függvényt adunk át a valami() függvény számára.

App.java
public class App {
    public static void valami(Runnable mehet) {
        mehet.run();
    }
    public static void main(String[] args) throws Exception {
 
        valami(()-> {
            System.out.println("működik");
        });
    }
}

Interfész

Készíthetünk saját interfészt is a megvalósításhoz:

App.java
interface Valami {
    public void csinal();
}
 
public class App {
    public static void mas(Valami mehet) {
        mehet.csinal();
    }
    public static void main(String[] args) throws Exception {
 
        mas(() -> {
            System.out.println("bbb");
        });
    }
}

Callback paraméterrel

App.java
interface Valami {
    public void csinal(String msg);
}
 
public class App {
    public static void mas(Valami mehet) {
        mehet.csinal("akármi");
    }
    public static void main(String[] args) throws Exception {
 
        mas((msg) -> {
            System.out.println(msg);
        });
    }    
}

ActionListener megvalósítás

Egy Messanger nevű komponenst készítünk, amihez eseményt lehet rendelni. Az esemény itt szimulált. Nem egy egér kattintás, vagy egy szerver válasza, csak egy Thread.sleep() hívás.

Main.java
interface ActionListener {
    void onMessage(String message);
}
 
class Messanger {
    void addActionListener(ActionListener listener) {
 
        // Az aszinkron folyamat szimulációja
        new Thread(() -> {
            try {
                Thread.sleep(3000); // Szimulált várakozás 3 másodpercig
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
 
            // Majd hívjuk meg a callback függvényt a háttérszálon
            listener.onMessage("Üzenet érkezett");
        }).start();
    }
}
 
public class Main {
    public static void main(String[] args) {
 
        Messanger messanger = new Messanger();
 
        // messanger.addActionListener(new ActionListener() {
        //     public void onMessage(String msg) {
        //         System.out.println(msg);
        //     }
        // });
 
        messanger.addActionListener(msg -> {
            System.out.println(msg);
        });
 
        System.out.println("Program 10 másodpercig fut...");
        // Várakozzunk, hogy lássuk az aszinkron működést
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
oktatas/programozas/java/java_callback.txt · Utolsó módosítás: 2023/11/21 20:01 szerkesztette: admin