2011-05-02 31 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