私はSpring Socialで小さなGroovyアプリケーションを使用して、Twitterからストリームを消費しています。私は今、いくつかの詳細を含め、私が受け取るすべてのツイートを記録したい。Groovyで所有していないクラスのtoStringをオーバーライドします
Tweet
クラスは自分自身のコードの中だろう場合は、私は簡単に素敵なログ出力を取得するには、この操作を行うことができます。
import groovy.transform.ToString
@ToString
class Tweet {
// fields...
}
しかし、私がログインするクラスは、春社会の内部にあることから、私ができる
」それをしないでください。toString
メソッドをオーバーライドする "Groovy"の方法はありますか?
toString
を追加すると、すべてのログ出力で明示的にtoString
を呼び出すことは望ましくないため、metaClass
にクロージャを適用しても実際には役に立ちません。
org.springframework.social.twitter.api.Tweet.metaClass.toString = {
"${delegate.field1}, ${delegate.field2}"
}
// still prints "received tweet [[email protected]]"
log.info("received tweet [{}]", tweet)
// prints "received tweet [field1 field]"
log.info("received tweet [{}]", tweet.toString())
を 'Tweet.metaClass.toString = { "$ delegate.field1 $ delegate.field2"}'? –
一般的に私はこれをやってはいけませんが、見つけるのは難しく、適切な場所に移動するのが難しく、コードがJavaから呼び出された場合は動作しません。 1つ以上の 'Tweet'インスタンスを含むものが必要ですか?なぜtoStringメソッドをそこに置かないのですか? –
@tim_yatesそれは本当です、私はデコレータのために行くだろう選択肢があれば、それは間違いなくクリーナーソリューションです。 –