java - 所有实例都相等的类的 HashCode 实现

标签 java hashcode equality

假设我有一个所有实例都被视为相等的类。一个典型的用例是没有任何状态但仅作为函数运行的类。

public class ToStringFunction implements Function<Object, String> {

    @Override
    public String apply(Object o) {
        return o.toString();
    }

    @Override
    public boolean equals(Object o) {
        return o instanceof ToStringFunction;
    }
}

现在,应该如何实现 hashCode 方法?自然地,它需要是一个常量值才能遵守 equals/hashCode 契约。但是那应该是什么值呢?如果使用了一些微不足道的值,例如 0 或 1,它可能会导致与其他类似类的冲突。

所以这似乎归结为一个问题:如何实现一个哈希码,它对于给定的类可能是唯一的,但对于它的所有实例都是一样的

我想到了这两个想法。你怎么看,他们是理智的吗?

@Override
public int hashCode() {
    return ToStringFunction.class.hashCode();
}

@Override
public int hashCode() {
    return "ToStringFunction".hashCode();
}

最佳答案

如果一个类没有状态,它应该是单例、抽象类或静态方法库(如 Math)。因此,为它覆盖 equals 和 hashcode 是没有意义的。

关于java - 所有实例都相等的类的 HashCode 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21985329/

相关文章:

java - 删除少量节点的 XQuery

java - 如何使 JPopupMenu 始终如一地变为 "shadow"组件

c# - 为什么通用类型定义实现的接口(interface)会丢失类型信息?

Javascript 相等怪异

Java - 如何使一组相互独立的JInternalFrame?

java - 如何使用 Spring/Roo 为 POST 编码特殊字符

java - 为什么 hashcode 设计为返回 int

java - 如何实现 hashCode 和 equals 方法

java - 为什么我不能在 MessageDigest 实例上调用 .update

java - 如何在 Java 中比较字符串?