Почему equals и hashCode были определены в Object?

Какова причина решения включить эти методы в java.lang.Object? Равенство и хеширование не имеют смысла для многих классов.

Было бы логичнее создать два интерфейса:

interface Equalable {
    boolean equals(Equalable other);
}

interface Hashable extends Equalable {
    int hashCode();
}

Например, определение HashSet может выглядеть как

class HashSet<T extends Hashable> ...

Это предотвратит одну из распространенных ошибок новичков - использование набора элементов без реализации equals / hashCode.

15
задан Kowser 14 November 2011 в 06:56
поделиться