有时我想要一个简单的通用侦听器而不定义自己的类。在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...
}
这不是您需要避免的代码重复类型。仅仅因为两个方法/接口共享相同的基本签名并不意味着它们应该组合为一个。我建议您创建在使用时间和方式方面完全自我记录的侦听器接口。