Переопределение hashCode () - этого достаточно?

Для класса, поля которого являются исключительно примитивными, например:

class Foo
{
    int a;
    String b;
    boolean c;
    long d;

    boolean equals(Object o)
    {
        if (this == o) return true;
        if (!(o instanceof Foo)) return false;
        Foo other = (Foo) o;
        return a == other.a && b.equals(other.b) && c == other.c && d = other.d;
    }
}

Это достаточно "хороший" способ записи hashCode () ?

boolean hashCode()
{
    return (b + a + c + d).hashCode();
}

То есть, Я создаю String из тех же полей, которые использует equals () , а затем просто использую String # hashCode () .

Edit: ] Я обновил свой вопрос, добавив в него поле long . Как следует обрабатывать long в hashCode () ? Просто позвольте ему переполниться int ?

7
задан Matt Ball 14 December 2010 в 19:35
поделиться