[Kotlin] LogクラスのTAGとしてActivityのクラス名を指定する処理をKotlinの拡張関数を使って共通化する
「毎回Activity毎にLogのTAG用変数作るとか面倒すぎじゃない?」
Kotlinなら拡張関数で簡単に共通化できそう... ということでやってみました。
LogクラスのTAGとしてActivityのクラス名を指定したい
「LogクラスのTAGとしてActivityのクラス名を出力する」ということはよくあるやり方だと思います。 JavaでもKotlinでも以前からAndroidではLog クラスを使ってログを出力できます。
Log クラス に載っているTAGの定義(Javaですが)を見てみましょう。
private static final String TAG = "MyActivity";
「いやいや、うーん、文字列入れてるだけじゃん。ってか毎回Activity毎にこれ定義するの?まじ?」
Kotlinの拡張関数を使って共通化
以下のようにKotlinを拡張してログを出力する関数を定義しました。
this::class.java.simpleName
を使ってクラス名を取得しています。
import android.app.Activity import android.util.Log fun Activity.logd(message: String) { Log.d(this::class.java.simpleName, message) }
使い方
使い方は簡単。Activityから定義したlogd
関数を呼ぶだけです。
fun didTapButton(view: View) { logd("user tapped the button.") }
おわりに
クラス名を取得する処理を1箇所にまとめたことでActivity毎に毎回LogのTAG用変数を定義する必要がなくなりました。 Kotlinの拡張関数便利ですね。