Надеюсь, чтобы внести некоторую ясность в это обсуждение, в Java принято переопределять hashCode
и equals
. Например, вы пытаетесь отслеживать сотрудников, которые имеют имена, но могут также иметь псевдоним. Цель состоит в том, чтобы убедиться, что эти сотрудники не дублируются. В этом случае я бы переопределил equals
и hashCode
, чтобы посмотреть только идентификатор сотрудника. Когда эти сотрудники вводятся в структуру данных Set, они не дублируются. В Clojure вы можете сделать:
(deftype Employee [name id]
Object
(equals [a b] (= (.id a) (.id b)))
(hashCode [this] (.hashCode (.id this)))
(toString [this] (.name this)))
(def vince (Employee. "Vince" 42))
(def vincent (Employee. "Vincent" 42))
(def tony (Employee. "Tony" 2))
(into #{} [vince vincent tony])
Но вы, возможно, захотите воспользоваться решением для структуры данных "чисто Clojure", а не использовать хеш-код, равнозначный пути взаимодействия Java.