gpt4 book ai didi

java - 删除特定监听器

转载 作者:行者123 更新时间:2023-12-01 04:57:00 26 4
gpt4 key购买 nike

目前我遇到了以下问题:我们在项目中使用了一些第三方库,并且有一个模型支持添加和删除(不获取!)某些类型的监听器。问题是添加监听器然后将其删除到其他地方,我们没有它的实例。解决方案之一是:使其成为单例,这样您就可以添加它并删除相同的实例(但恕我直言,这很丑陋)。第二个如下:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com