Eclipse Xtend: переопределение equals () и operator_equals () - PullRequest
0 голосов
/ 05 октября 2018

Какой метод мне следует реализовать в Xtend, если я хочу объявить проверку на равенство?

AFAIK, если я использую оператор '==', тогда он компилируется как вызов equals () в Java.

Если так, то зачем мне определять operator_equals (), когда я могу просто переопределить equals ()?

ОБНОВЛЕНИЕ: Как указывал @kapex, не рекомендуется переопределять '==', так как это может привестичтобы кодировать поведение по-разному в Xtend и Java, пример ниже:

class Person {
    override equals(Object person) {
        true // We are all the same
    }

    def operator_equals(Person person) {
        false // We are all different
    }
}

1 Ответ

0 голосов
/ 05 октября 2018

Если ваша цель состоит в том, чтобы изменить «равное» поведение, вам следует просто переопределить equalshashCode).

Вы можете определить operator_equals, только если вы хотите, чтобы оно имело другоеповедение, чем equals.Но вы, как правило, этого не хотите.

Если вы перегрузите оператор ==, оригинальный метод equals все еще существует, и некоторый код может использовать этот оператор, тогда как другой код будет использовать equals (дляпример библиотеки Java).Это звучит как хороший способ что-то сломать.

Имеет смысл для Xtend предоставить возможность перегружать все операторы для некоторых нечетных случаев использования или даже просто для согласованности, но, на мой взгляд, переопределение существующего поведения оператора плохопрактиковать и его следует избегать.Гораздо безопаснее перегружать только операторы, которые еще не определены для типа.

...