问题描述
|
有时我想要一个简单的通用侦听器而不定义自己的类。在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...
}
这不是您需要避免的代码重复类型。仅仅因为两个方法/接口共享相同的基本签名并不意味着它们应该组合为一个。我建议您创建关于何时以及如何使用它们完全自我记录的侦听器接口。
, 有java.util.Observer,但是仅适用于Observable子类。 (也就是说,任何东西都可以实现Observer接口,但只能观察Observable对象。)
, 如果要避免定义侦听器类,请考虑直接在可观察对象中定义回调方法:
abstract class MyWorker{
public MyWorker(){
//...
onComplete();
}
protected abstract void onComplete();
}
然后稍后覆盖它们:
new MyWorker(){
protected void onComplete(){
//..
}
}
显然,这并不适合所有情况。有时您需要一个真正的侦听器类。