Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
object / companion object
『object』キーワードでシングルトンオブジェクトを定義し、『companion object』でクラスに静的メンバーを持たせる仕組みです。
構文
// シングルトンオブジェクトの定義
object オブジェクト名 {
val プロパティ名 = 値
fun メソッド名() { }
}
// companion object(クラス内の静的メンバー)
class クラス名 {
companion object {
val プロパティ名 = 値
fun メソッド名() { }
}
}
構文一覧
| 構文 | 概要 |
|---|---|
| object オブジェクト名 { } | シングルトンのオブジェクトを定義します。プログラム実行中にインスタンスは1つだけ存在します。 |
| companion object { } | クラス内に静的メンバーを定義します。Javaの『static』に相当します。 |
| companion object 名前 { } | 名前付きの companion object を定義します。名前は省略可能です。 |
サンプルコード
// シングルトンオブジェクトの定義と利用
object AppConfig {
val appName = "MyApp"
val version = "1.0.0"
fun printInfo() = println("$appName v$version")
}
// companion object を持つクラス
class Counter {
companion object {
private var count = 0
fun increment() { count++ }
fun getCount() = count
}
}
fun main() {
// object はインスタンス化せずにそのまま使います。
AppConfig.printInfo()
println(AppConfig.version)
// companion object のメンバーはクラス名から呼び出せます。
Counter.increment()
Counter.increment()
println(Counter.getCount()) // 2
}
概要
『object』宣言はシングルトンパターンをシンプルに実現する構文です。クラス定義と同時にインスタンスが1つだけ作成され、プログラム全体で共有されます。定数やユーティリティ関数をまとめる用途によく使われます。
『companion object』はクラスに紐づいた静的メンバーを定義します。Kotlinには『static』キーワードがないため、Javaの静的メンバーに相当するものは『companion object』で実現します。ファクトリメソッドや定数の定義に適しています。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。