java阻止类覆盖equals

use*_*642 1 java overriding final interface

我想使用java.util.Set(和其他集合),但有一个扭曲:我想contains(),add()等等,总是调用对象equals()(这是基于身份而不是更平等的操作).我想我有办法,但它有很大的缺点.有没有正确的方法来做到这一点?对不起,如果我错过了一些明显的东西.

这就是我所做的:

public class OnlySelfEqual {
    public final boolean equals(Object o){
        return super.equals(o);
    }
}

public class Example{
    private Set<T extends OnlySelfEqual> set;
    //etc
}
Run Code Online (Sandbox Code Playgroud)

我看到的主要问题(可能还有很多其他问题)是所有Ts必须从类扩展而不是实现接口,这是非常严格的.我想我想要的就像一个'反向'接口,它列出了子类型无法实现的方法(覆盖).我很确定不存在.有什么建议?

Ian*_*rts 8

java.util.IdentityHashMap是一种通过使用而不是Map故意违反Map合同的实现,因此您可以使用例如获得相同的行为==equals()Set

Set<String> set = Collections.newSetFromMap(new IdentityHashMap<String, Boolean>());
Run Code Online (Sandbox Code Playgroud)