覆盖哈希码和等于强制所有实例相同

时间:2019-04-08 19:20:53

标签: java

class Dog {
    private int variableA;
    private int variableB;
    private int variableC;
    public Dog(int A, int B, int C) {
        variableA = A;
        ...
    }

    @Override
    public int hashCode() {
        int result = 17;
        return result;
    }

    @Override
    public boolean equals(Object o) {
        if (o == this)
            return true;

        if (o instanceof Dog)
            return true;

        return false;
    }


Set<Dog> dogSet = new HashSet<>();
dogSet.add(new Dog(1,2,3))
dogSet.add(new Dog(2,3,4))

我想确保dogSet中只有Dog的一个实例

我相信我的hashCode()equals()实现了这一目标。这是我实施方式的最佳实践吗?

编辑
狗将有多种类型,而狗实际上是一个接口

public interface Dog
public class ShortDog extends Dog
public class BigDog extends Dog
public class OnlyOneDog extends Dog
...

并且实际上存在一个名为DogHouse的类,该哈希集存在于其中

public class DogHouse
    private Set<Dog> dogSet = new HashSet<>();

我们可以有很多Dog的实例(它们的子类型),但是我想确保dogSet对于OnlyOneDog来说是唯一的,而我打算用hashcode和equals实现它。

我打算覆盖OnlyOneDog中的哈希码+等于。这是OnlyOneDog的特例

还有更好的方法吗?

0 个答案:

没有答案