Eclipse Xtend:覆盖equals()与operator_equals()

时间:2018-10-05 12:52:47

标签: operator-overloading xtend

如果要声明相等性检查,应该在Xtend中实现哪个方法?

AFAIK如果我使用'=='运算符,那么它将被编译为Java中的equals()调用。

如果是这样,那么当我可以简单地覆盖equals()时,为什么还要定义一个operator_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 :(得分:0)

如果您的目标是更改“等于”行为,则应该简单地覆盖equals(和hashCode)。

仅当您希望operator_equalsequals具有不同的行为时,才定义它。但是您通常不希望那样。

如果重载==运算符,则原始的equals方法仍然存在,某些代码可能会使用该运算符,而其他代码会使用equals(例如Java库)。这听起来像是打破某些事物的好方法。

对于Xtend而言,能够为某些奇怪的用例甚至是出于一致性提供重载所有运算符的能力是有意义的,但是在我看来,重新定义现有的运算符行为是不好的做法,应该避免。仅重载尚未为类型定义的运算符要安全得多。

相关问题