AndroidでアクティビティTAGをKotlinで定義する正しいコード例

ぴーすけのWeb開発+アプリ開発の部屋

Androidアプリ開発でよく使うので

Activityにタグ(TAG)を割り振ることがあります。

▼ デバッグ情報のLog出力時とかに使う

Log.d(TAG, "Debug message");

これをKotlinで定義するにはどうするのかって話です。

Javaの場合でのアクティビティTAGの定義方法

Javaの場合だとアクティビティTAGの定義はこんな感じ

▼ Activity内にて

private static final String TAG = MainActivity.class.getName();

▼ それでLog.d()に対してTAGを渡して使う

Log.d(TAG, "Debug message");

こうすると TAG = "MainActivity" という値が代入され、ログ出力時にアクティビティ名で出力を絞りたい時に便利になります。

いちいち "MainActivity" と書きたくないからTAGを使ってるだけ

KotlinでのアクティビティTAGの正しい定義方法

こういうコードでTAGを定義できます。

▼ MainActivityに対してTAGを定義

companion object {
    val TAG = MainActivity::class.qualifiedName
}

▼ あとはJava同様にLog出力できる

Log.d(TAG, "Debug message")

実はKotlinクラスは静的なメンバを持つことができない。
すなわちstatic変数を定義すること自体が不可能みたいです。

そこで代替としてcompanionというキーワードが登場します。

▼ 詳しくは次の記事とか見ればいいと思う

クラス内で定義されているオブジェクトの1つに companion というキーワードを付けることが可能です。このキーワードを付与することで、オブジェクトの名前を明示せずに、クラス名を使って直接そのオブジェクトのメソッド名やプロパティにアクセス可能となります。Javaにおける静的メソッド呼び出しと全く同じ状態となります。

https://blog.y-yuki.net/entry/2019/06/02/003000

こういう風にKotlinでは静的メソッド・静的メンバはcompanionキーワードを使って定義しないとダメな模様です。

ということでKotlinでのアクティビティTAGの定義についてでした。

KotlinとJavaは完全な互換性があるとはいえ、
コード上ではすごく色々違うんだなって思いました。

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
ぴーすけのWeb開発+アプリ開発の部屋
個人でWebサービスとかAndroidアプリとかを開発している人。このnoteでは本ブログ(pisuke-code.com)よりもさらに踏み込んだ内容・重箱の隅をつつくような開発に役立つ知識を発信しています。眉毛が太い。