В следующем отрывке Groovy я пытаюсь заменить обоих hashCode
и toString
методы
String.metaClass.toString = {-> "override" }
String.metaClass.hashCode = {-> 22 }
Но когда я проверяю его, только замена hashCode
работы
String s = "foo"
println s.hashCode() // prints 22
println s.toString() // prints "foo"
toString
так или иначе особый случай (возможно из соображений безопасности)?
См. Первый комментарий по этой проблеме . В нем говорится о String toString и других связанных классах String:
(...) кажется намеренным, вероятно, это хорошая идея иметь более быстрый вызов для классов, которые не позволяют переопределение toString ().