Еще один вопрос о событиях Java - PullRequest
0 голосов
/ 02 мая 2011

Итак, я видел несколько вопросов о стековом потоке, спрашивающих, как реализовать события в Java, но ни один из них не дает примеров, отличных от «прочитайте это».

Может быть, кто-нибудь проявит любезность и предоставит краткий пример того, как можно реализовать базовый эквивалент следующего кода C #?

public event EventHandler<MessageReceivedEventArgs> MessageReceived;
protected virtual void OnMessageReceived(Socket socket, CommandType commandType, MemoryStream message) 
{
    if (this.MessageReceived != null)
    {
        this.MessageReceived(this, new MessageReceivedEventArgs(socket, commandType, message));
    }
}

1 Ответ

1 голос
/ 02 мая 2011

Обычно многоадресные делегаты не используются в Java.Если вам не нужно многоадресное преобразование, код будет выглядеть следующим образом:

public interface MessageReceivedListener {
    void onMessageReceived(Object sender, MessageReceivedEventArgs e);
}

private MessageReceivedListener messageReceivedListener;

public void setMessageReceivedListener(MessageReceivedListener listener) {
    this.messageReceivedListener = listener;
}

protected void onMessageReceived(Socket socket, CommandType commandType, MemoryStream message) {
    if (this.messageReceivedListener != null) {
        this.messageReceivedListener.onMessageReceived(this,
           new MessageReceivedEventArgs(socket, commandType, message));
    }
}

Если вы хотите реализовать многоадресное преобразование, то вы можете создать контейнер со слушателями, выполнить итерацию по этим слушателям иобработчики вызовов.В этом случае будут методы addMessageReceivedListener и removeMessageReceivedListener для управления активными слушателями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...