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

Eclipse Xtend: Overriding equals() vs. operator_equals()

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

据我所知,如果我使用“==”运算符,那么它会被编译为 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
    }
}

如果您的目标是改变 "equal to" 行为,那么您应该简单地覆盖 equals(和 hashCode)。

如果您希望它具有与 equals 不同的行为,您只需定义 operator_equals。但你通常不希望那样。

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

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