Intereting Posts

Является ли котильское структурное равенство проверкой супер типов?

Я читал по теме, немного больше, и я просто хочу убедиться, что правильно понял. Похоже, что ответ заключается в том, что нам еще нужно переопределить равные классы, чтобы определить, что такое проверка структурного равенства? Итак, если мы хотим проверить customer1 == customer2 тогда мы сначала должны определить, какое структурное равенство для Customer реализуется равным, и в этот момент Котлин будет использовать нашу реализацию с помощью оператора == ?

Таким образом, в этом случае, если Customer наследует от Person и мы также хотим выполнить проверку структурного равенства с использованием свойств из Person тогда мы будем реализовывать это в методе equals(Object object) ?

    Итак, если мы хотим проверить client1 == customer2, тогда мы сначала должны определить, какое структурное равенство для Клиента реализуется равным, и в этот момент Котлин будет использовать нашу реализацию с помощью оператора ==?

    Да. Если Customer является data class , то вы автоматически получаете реализацию equals , иначе вам нужно явно определить его.

    Таким образом, в этом случае, если Клиент наследует от Лица, и мы также хотим выполнить проверку структурного равенства с использованием свойств из Лица, тогда мы будем реализовывать это в методе equals (Object object)?

    Опять же, да (используйте Any? Вместо Object ), как и на Java, и это … сложно. См. https://stackoverflow.com/a/7798706/9204 и https://stackoverflow.com/a/13163898/9204 , а также статьи, связанные с ними, для получения дополнительной информации.

    Добавлю, что использование Котлином термина «структурное равенство» не является нормальным. Обычно он зарезервирован для случаев, когда равенство проверяется путем сравнения всех (соответствующих) полей для равенства, как в data class , а не «независимо от того, что происходит».