如何在类之间执行JAVA回调?

10 浏览
0 Comments

如何在类之间执行JAVA回调?

我来自JavaScript,在那里回调函数非常容易。我正在尝试将它们实现到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.setNewConnectionCallback(new ServerConnections.NewConnectionCallback() {
            @Override
            public void onNewConnection(Socket _socket) {
                System.out.println("A function of my child class was called.");
            }
        });
        workers.execute(serverConnectionHandler);
        System.out.println("Do something else...");
    }
}

然后我有一个子类,从父类中调用:

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;
    private NewConnectionCallback newConnectionCallback;
    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 setNewConnectionCallback(NewConnectionCallback callback) {
        newConnectionCallback = callback;
    }
    public void newConnection(Socket _socket) {
        if (newConnectionCallback != null) {
            newConnectionCallback.onNewConnection(_socket);
        }
    }
    public interface NewConnectionCallback {
        void onNewConnection(Socket _socket);
    }
}

在父类中正确实现以下部分:

serverConnectionHandler.setNewConnectionCallback(new ServerConnections.NewConnectionCallback() {
    @Override
    public void onNewConnection(Socket _socket) {
        System.out.println("A function of my child class was called.");
    }
});

0