Для класса, поля которого являются исключительно примитивными, например:
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().
  Изменить: Я обновил свой вопрос, включив в него поле long. Как следует обрабатывать long в hashCode()? Просто позвольте этому переполнению int?
