当父是Map或Collection时,Groovy GString呈现不会调用重写的toString()方法

时间:2017-07-28 23:42:41

标签: groovy gstring

这是最小的演示案例:

class T extends HashMap {
  @Override
  String toString() {
    return "foo"
  }
}

def t = new T()
println t.toString()
println "${t}"​

输出

foo
[:]

因此,@Override toString()从未执行以获取GString内的值。我应该把断点放在里面从来没有停在那里。我错过了什么或者它是一个错误吗?除了HashMapCollection之外似乎工作正常。

1 个答案:

答案 0 :(得分:2)

GString不直接致电Map.toString()而是致电

InvokeHelper.write(Writer out, Object object)

放置断点here,看看会发生什么:

我已经在调试会话中录制了一段简短的视频,以准确地向您展示将此对象放入GString时会发生什么:

  

https://youtu.be/HYHdfmwd-lw

我希望它有所帮助。