Groovy рендеринг GString не вызывает переопределенный метод toString(), когда parent является Map или Collection
Вот минимальный демонстрационный пример:
class T extends HashMap {
@Override
String toString() {
return "foo"
}
}
def t = new T()
println t.toString()
println "${t}"
Выход
foo
[:]
Итак @Override toString()
никогда не выполняется для получения значения в течение GString
, Должен ли я поставить точку останова внутри, она никогда не остановилась Я что-то упустил или это ошибка? Кроме как HashMap
а также Collection
Кажется, работает нормально.
1 ответ
GString
не звонит Map.toString()
прямо и вместо этого он вызывает
InvokeHelper.write(Writer out, Object object)
Поставьте точку останова здесь и посмотрите, что произойдет:
Я записал небольшое видео из сеанса отладки, чтобы показать вам, что именно происходит, когда этот объект помещается в GString:
Я надеюсь, что это помогает.