Если я динамически переопределяю equals
и hashCode
методы для класса, вызов этих методов напрямую вызывает переопределенные версии, но с их использованием для set использует неперекрываемые версии. Почему это так, и все еще возможно динамически переопределять эти два метода для всех применений?Динамически переопределять `equals` и` hashCode` в groovy
class SuperClass {
public boolean equals(Object other) {
println 'non overridden equals called'
false
}
public int hashCode() {
println 'non overridden hashCode called'
1
}
}
SuperClass.metaClass.equals = { Object other ->
println 'overridden equals called'
true
}
SuperClass.metaClass.hashCode = { ->
println 'overridden hashCode called'
1
}
def a = new SuperClass()
def b = new SuperClass()
println a.hashCode() // overriden hashCode called
println b.hashCode() // overriden hashCode called
println a.equals(b) // overriden equals called
println([a, b].toSet().size()) // non overriden methods called, returns 2 instead of 1
Где вы переопределили equals() и set hashcode() в метаклассе? – Will
Зачем мне нужно переопределять 'Set'' equals' и 'hashcode'? – tig
Извините, половина прочитала вопрос :-) – Will