我是否需要为java中的添加/删除侦听器定义hashcode和equal?

我是否需要为java中的添加/删除侦听器定义hashcode和equal?,java,list,listener,equals,hashcode,Java,List,Listener,Equals,Hashcode,添加/删除侦听器在Java中如何工作?Java使用列表来添加/删除侦听器,但当我在显示帧时添加侦听器,并在隐藏帧时尝试将其删除时,它似乎无法正常工作。它仍然存在!!!我们应该如何删除侦听器?使用listenerList.remove(实例)还不够吗?还是我应该做点别的?我应该为所有侦听器实例定义hashCode和equal。我从未在Java中见过这样的实践 我不清楚在没有hashCode()和equal()的情况下它是如何工作的,也不清楚它是否应该只通过在我们的add/removeXXXList

添加/删除侦听器在Java中如何工作?Java使用列表来添加/删除侦听器,但当我在显示帧时添加侦听器,并在隐藏帧时尝试将其删除时,它似乎无法正常工作。它仍然存在!!!我们应该如何删除侦听器?使用
listenerList.remove(实例)
还不够吗?还是我应该做点别的?我应该为所有侦听器实例定义hashCode和equal。我从未在Java中见过这样的实践

我不清楚在没有hashCode()和equal()的情况下它是如何工作的,也不清楚它是否应该只通过在我们的
add/removeXXXListener(instance)
方法中使用
listenerList.add/remove(instance)
工作

我添加/删除侦听器的代码如下所示:

List<ITackleMovementListener> tackleMovementListeners = new ArrayList<>();
public void addTackleMovementListener(ITackleMovementListener tml){
    this.tackleMovementListeners.add(tml);
}

public void removeTackleMovementListener(ITackleMovementListener tml){
    this.tackleMovementListeners.remove(tml);
}
List-tackleMovementListeners=new-ArrayList();
public void addTackleMovementListener(ITackleMovementListener tml){
this.tackleMovementListeners.add(tml);
}
public void removeTackleMovementListener(ITackleMovementListener tml){
this.tackleMovementListeners.remove(tml);
}

我使用JFrame的
addComponentListener
来添加和删除侦听器,但是在关闭JFrame后侦听器仍然存在

不确定它如何解决正确删除它的问题,但是
对象
中的
hashcode/equals
的默认实现是使用内存位置,因此
对象
始终等于自身,如果这些方法未被重写,则永远不等于任何其他
对象
。您不需要定义equals和hashCode,因为它在默认情况下应该进行引用比较(如果我错了,请更正)。你能告诉我在哪里使用添加和删除吗?如果你使用的是
列表
,你不需要实现
hashCode
equals
@JohnB反正现在我还没有重写equals和hashCode。可能是ComponentShowed和componentHidden运行时的延迟?您确定要添加和删除同一个实例吗?您还应该检查add&remove是否从同一线程调用,否则它们可能会看到线程本地副本(线程缓存)。或者,您可以使用CopyOnWriteArraySet来避免线程问题。