使用Groovy元编程替换toString

在下面的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某种特殊情况(可能出于安全原因)?

解决方法

看到第一个注释 on this issue.它说关于String的toString和其他String相关的类:

(…) seems to be intent,it is probably a good idea to have a faster invocation for classes that don’t allow overriding toString().

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...