[Kotlin] package-levelを利用してstaticな定数を定義する

2018年1月9日(更新: 2018年4月26日)

Java における static な変数やメソッドを Kotlin で定義する方法についてです。

クラスを跨いで使いたい定数などを Kotlin で定義したい場合、パッケージ文やインポート文と同じ位置package-level)にそれを書きます。

複数のクラスで利用できる定数の定義

例えば Java では以下のように定義して、

public static final String DEBUG_TAG = "myDebugTag"

以下のように他クラスから定数を呼び出していました(DEBUG_TAGは任意の定数名です)。

クラス名.DEBUG_TAG

Kotlin では package-level に以下のように定数を定義できます。

const val DEBUG_TAG = "myDebugTag"

サンプルコード

以下のコードは、実際に複数のクラスから定数を呼び出す例です。

プログラム全体で使用できる定数を、デバッグログのタグに設定しています。

package com.example.test

import android.content.Context
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.view.View

// クラスを跨いで使用できる定数
const val DEBUG_TAG = "myDebugTag"

// 1つ目のクラス
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.i(DEBUG_TAG, "定数の利用1")
    }
}

// 別のクラス
class MyView(context: Context): View(context) {
    init {
        Log.i(DEBUG_TAG, "定数の利用2")
    }
}

以上が Kotlin で複数のクラスから使用できる定数を定義する方法です。

関数(fun)も同じように package-level に定義することができます。

static なメソッドの定義には「companion object」と呼ばれる仕組みを利用する方法もあります。これについては別の機会に紹介したいと思います。

コメントを残す

メールアドレスが公開されることはありません。