使用Groovy元编程替换toString

Dón*_*nal 12 groovy metaprogramming

在下面的Groovy片段中,我尝试替换hashCodetoString方法

String.metaClass.toString = {-> "override" }
String.metaClass.hashCode = {-> 22 }
Run Code Online (Sandbox Code Playgroud)

但是当我测试它时,只能更换hashCode作品

String s = "foo"
println s.hashCode()  // prints 22
println s.toString()  // prints "foo"
Run Code Online (Sandbox Code Playgroud)

toString某种程度上是一个特例(可能出于安全原因)?

Fel*_*ano 5

请参阅有关此问题的第一条评论.它说的是String的toString和其他与String相关的类:

(...)似乎是意图,对于不允许重写toString()的类更快地调用可能是个好主意.