【问题标题】:Yet another Java events question又一个 Java 事件问题
【发布时间】:2011-05-02 06:05:53
【问题描述】:

所以我在 stackoverflow 上看到了多个问题,询问如何在 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));
    }
}

【问题讨论】:

    标签: java android events design-patterns


    【解决方案1】:

    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));
        }
    }
    

    如果你想实现多播,那么你可以创建一个带有监听器的容器,遍历这些监听器并调用处理程序。在这种情况下,将有 addMessageReceivedListenerremoveMessageReceivedListener 方法来管理活动侦听器。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      相关资源
      最近更新 更多