覆盖equals方法不起作用

Cor*_*sDK 5 java overriding

我在这里和其他网站上一直在浏览很多类似的问题.我似乎无法解决这个问题.

我有一节课:

public class Event {
    public String Item;
    public String Title;
    public String Desc;

    @Override
    public boolean equals(Object o) {
            return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正试图在这个课程中使用这个课程,ArrayList<Event> events但我找不到办法events.contains("item")去上班.我试过debuging,我发现它甚至没有进入被覆盖的方法.

我究竟做错了什么?

rle*_*ndi 7

那是因为你破坏了契约规定的对称性equals():如果任何事件等于"item"(这是一个字符串),"item"也应该等于任何事件.

实际上,Java所做的就是调用indexOf("item")你的列表,并检查它是否是正面的.

现在,indexOf()在这样ArrayList的例子中工作(参见完整的源代码):

    for (int i = 0; i < size; i++)
        if ("item".equals(elementData[i]))
            return i;
Run Code Online (Sandbox Code Playgroud)

所以基本上是这里调用的String的equals()方法,而不是你当然返回false的方法.

只需Event为函数指定一个参数即可解决此问题,例如:

events.contains( new Event("item", "title", "desc") )
Run Code Online (Sandbox Code Playgroud)

请注意,您必须为您的类创建一个正确的构造函数,以初始化成员.