2011-05-02 59 views
0

所以我看到了多个关于stackoverflow的问题,询问如何在java中实现事件,但没有一个似乎提供了其他示例,然后“阅读本”。又一个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

通常在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管理活动侦听器的方法。

+0

为此欢呼。 :-) – 2011-05-03 04:40:05