有时我想要一个简单的通用侦听器而不定义自己的类。在Java或Android中是否存在预定义的“发生了什么事,并且这里是字符串或对象等”?

最佳答案

我从事的一个项目就是这样。一旦一个类实现了“MyListener”接口来处理两种完全不同的事件,它就会导致一些可怕的,难以理解的代码。缺乏关注点分离,您不知道何时或如何调用该方法。

public interface GenericListener {
    public void handleMyEvent(Object sourceObj, int eventCode);
}

//...later on there's some implementation
public void handleMyEvent(Object sourceObj, int eventCode) {
    if ( sourceObj == startDownloadButton && eventCode == MyButton.CLICKED ) {
        //... 20 lines of code to start download
    } else if ( sourceObj instanceOf DownloadStatus && eventCode == DownloadStatus.COMPLETE ) {
        //... 10 lines of code to display status
    } else //... and on and on...
}

这不是您需要避免的代码重复类型。仅仅因为两个方法/接口共享相同的基本签名并不意味着它们应该组合为一个。我建议您创建在使用时间和方式方面完全自我记录的侦听器接口。

07-28 04:21