第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在類之間執(zhí)行JAVA回調(diào)?

如何在類之間執(zhí)行JAVA回調(diào)?

紫衣仙女 2019-11-25 10:54:24
我來自JavaScript,其中的回調(diào)非常簡單。我正在嘗試將它們實施到JAVA中,但沒有成功。我有一個家長班:import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Server {    ExecutorService workers = Executors.newFixedThreadPool(10);    private ServerConnections serverConnectionHandler;    public Server(int _address) {        System.out.println("Starting Server...");        serverConnectionHandler = new ServerConnections(_address);        serverConnectionHandler.newConnection = function(Socket _socket) {            System.out.println("A function of my child class was called.");        };        workers.execute(serverConnectionHandler);        System.out.println("Do something else...");    }}然后我有一個子類,從父類中調(diào)用:import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.logging.Level;import java.util.logging.Logger;public class ServerConnections implements Runnable {    private int serverPort;    private ServerSocket mainSocket;    public ServerConnections(int _serverPort) {        serverPort = _serverPort;    }    @Override    public void run() {        System.out.println("Starting Server Thread...");        try {            mainSocket = new ServerSocket(serverPort);            while (true) {                newConnection(mainSocket.accept());            }        } catch (IOException ex) {            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);        }    }    public void newConnection(Socket _socket) {    }}什么是實施serverConnectionHandler.newConnection = function(Socket _socket) {    System.out.println("A function of my child class was called.");};部分,在Parent類中,哪個顯然不正確?
查看完整描述

3 回答

?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊

使用觀察者模式。它是這樣的:


interface MyListener{

    void somethingHappened();

}


public class MyForm implements MyListener{

    MyClass myClass;

    public MyForm(){

        this.myClass = new MyClass();

        myClass.addListener(this);

    }

    public void somethingHappened(){

       System.out.println("Called me!");

    }

}

public class MyClass{

    private List<MyListener> listeners = new ArrayList<MyListener>();


    public void addListener(MyListener listener) {

        listeners.add(listener);

    }

    void notifySomethingHappened(){

        for(MyListener listener : listeners){

            listener.somethingHappened();

        }

    }

}

您創(chuàng)建一個接口,該接口具有在發(fā)生某個事件時要調(diào)用的一個或多個方法。然后,事件發(fā)生時需要通知的任何類都將實現(xiàn)此接口。


由于生產(chǎn)者僅知道偵聽器接口,而不是偵聽器接口的特定實現(xiàn),因此這提供了更大的靈活性。


在我的示例中:


MyClass 是生產(chǎn)者,因為它通知了聽眾列表。


MyListener 是接口。


MyForm我對什么時候感興趣somethingHappened,所以它正在實施MyListener和注冊MyClass。現(xiàn)在,無需直接引用MyClass即可通知MyForm事件MyForm。這是觀察者模式的優(yōu)勢,它減少了依賴性并提高了可重用性。


查看完整回答
反對 回復(fù) 2019-11-25
?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊

我不知道這是否是您要尋找的,但是您可以通過將回調(diào)傳遞給子類來實現(xiàn)。


首先定義一個通用回調(diào):


public interface ITypedCallback<T> {

    void execute(T type);

}

在ServerConnections實例上創(chuàng)建一個新的ITypedCallback實例:


public Server(int _address) {

    serverConnectionHandler = new ServerConnections(new ITypedCallback<Socket>() {

        @Override

        public void execute(Socket socket) {

            // do something with your socket here

        }

    });

}

在回調(diào)對象上調(diào)用execute方法。


public class ServerConnections implements Runnable {


    private ITypedCallback<Socket> callback;


    public ServerConnections(ITypedCallback<Socket> _callback) {

        callback = _callback;

    }


    @Override

    public void run() {   

        try {

            mainSocket = new ServerSocket(serverPort);

            while (true) {

                callback.execute(mainSocket.accept());

            }

        } catch (IOException ex) {

            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

}

順便說一句:我沒有檢查它是否100%正確,請直接在此處進(jìn)行編碼。


查看完整回答
反對 回復(fù) 2019-11-25
  • 3 回答
  • 0 關(guān)注
  • 349 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號