我正在使用一个带有Spring Social的小型Groovy应用程序来使用来自Twitter的流。我现在想记录我收到的每条推文,包括一些细节。
如果Tweet
类在我自己的代码中,我可以很容易地做到这一点来获得一个不错的日志输出:
import groovy.transform.ToString
@ToString
class Tweet {
// fields...
}
但是因为我要记录的课程是在Spring Social中,所以我不能这样做。是否存在覆盖toString
方法的“Groovy”方式?
向toString
添加metaClass
关闭并没有多大帮助,因为我不想在每个日志输出中显式调用toString
。
org.springframework.social.twitter.api.Tweet.metaClass.toString = {
"${delegate.field1}, ${delegate.field2}"
}
// still prints "received tweet [org.springframework.social.twitter.api.Tweet@637c1991]"
log.info("received tweet [{}]", tweet)
// prints "received tweet [field1 field]"
log.info("received tweet [{}]", tweet.toString())
答案 0 :(得分:1)
是的,你可以这样做。 Groovy有能力使用metaClass功能向现有类注入新方法。当您在类上调用方法时,将检查所谓的元类注册表,以查看该类实例是否存在metaClass扩展方法。
只需定义:
Tweet.metaClass.toString = {"${delegate.field}, ${delegate.anotherField}"}