【发布时间】:2017-11-26 19:18:35
【问题描述】:
根据文档,== 运算符调用 equals 方法。 groovy 中的地图似乎并非如此。这是一个错误还是我做错了什么?
当一个类扩展 LinkedHashMap 并覆盖 equals 时
class CustomExtend extends LinkedHashMap<String, String> {
@Override
boolean equals(Object o) {
false
}
}
def customExtend = new CustomExtend()
customExtend.put('key', 'value')
assert [key:'value'] == customExtend
assert customExtend == [key:'value']//should be false
我尝试的另一个策略是委托
class CustomDelegate {
@Delegate
LinkedHashMap map = [:]
@Override
boolean equals(Object o) {
false
}
}
def customDelegate = new CustomDelegate()
customDelegate.put('key', 'value')
assert [key:'value'] == customDelegate
assert customDelegate == [key:'value']//should be false
【问题讨论】:
-
Groovy 相等性检查是……特殊的。参见例如stackoverflow.com/questions/13687154/groovy-operator