目前我遇到了以下问题:我们在项目中使用了一些第三方库,并且有一个模型支持添加和删除(不获取!)某些类型的监听器。问题是添加监听器然后将其删除到其他地方,我们没有它的实例。解决方案之一是:使其成为单例,这样您就可以添加它并删除相同的实例(但恕我直言,这很丑陋)。第二个如下:
class MyListener implements CoolThirdPartyModelListener{
...
@Override
public boolean equals(Object obj){
if (obj == null){
return false;
}
if(obj == this){
return true;
}
return obj instanceof MyListener;
}
}
只需调用以下命令即可将其从监听器列表中删除:
coolThirdPartyModelInstance.removeListener(new MyListener());
但第二个有丑陋的 equals()
方法:( 我被告知以这种方式删除监听器有点棘手。
所以我想询问您对这两个变体的看法,也许(这太棒了)您可以提出比我发现的更酷的东西。
最佳答案
您可以引入某种单例管理器,而不是使用单例监听器,如下所示:
interface CoolThirdPartyListenerManager {
public void addListenerForModel(CoolThirdPartyModel model, CoolThirdPartyModelListener listener);
/*
* return value should indicate success of operation, i.g. return false if no
* listeners were added to model.
* it can also throw some sort of exception, if it suits your needs better.
*/
public boolean removeListenerFromModel(CoolThirdPartyModel model);
}
(或者你可以创建一个带有一堆静态方法的类)
内部实现可以有类似的内容
private Map<CoolThirdPartyModel, CoolThirdPartyModelListener> mAddedListeners;
它将存储为特定模型添加的监听器实例。
然后在 removeListenerFromModel()
中,您可以获取从 Map 中为该模型添加的监听器并将其删除。
关于java - 删除特定监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13948389/