• Математика в програмуванні

  • Математика в програмуванні

    <edited>
    Я мав на увазі, що неможливо написати нетривіальний hashCode саме для такого equals як в прикладі, а не в принципі для класу Point.
    Проблема побудови хеш коду лежить в нетранзитивності операції. Можна довести, що будь-які дві точки повинні мати однаковий хеш-код, інакше контракт буде порушуватися.

  • Математика в програмуванні

    З документації:
    If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.

    При такій реалізації методу equals яку подано вище, ця вимога буде порушуватися якщо x, y не рівні між собою але в межах похибки (заданої в equals).

  • Математика в програмуванні

    Цікавий приклад. В мене на проекті одного разу я чув пропозицію подібно equals реалізувати.
    Крім проблеми транзитивності і симетричності тут ще проблема в неможливості реалізувати нетривіальний hashCode (нетривіальний = не «return 0;»).

  • Математика в програмуванні

    Взагалі-то він правий, що в тій стрічці помилка. Правильна реалізація obj.getClass() != this.getClass(), а така реалізація як в оригіналі буде неправильно працювати з нащадками.

    Підтримав: Зепп Бранниган