замена toString использование метапрограммирования Groovy

В следующем отрывке 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 так или иначе особый случай (возможно из соображений безопасности)?

12
задан Dónal 19 May 2010 в 13:48
поделиться

1 ответ

См. Первый комментарий по этой проблеме . В нем говорится о String toString и других связанных классах String:

(...) кажется намеренным, вероятно, это хорошая идея иметь более быстрый вызов для классов, которые не позволяют переопределение toString ().

5
ответ дан 2 December 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: