オブジェクト宣言
アプリの設定情報のように、
一つしかインスタンスを持たないクラスを用意したいことがあります。
このような場合に使用する仕組みをオブジェクト宣言と言います。
オブジェクト宣言の一般的な構文は以下の通りです。
object name{ body }
name
:オブジェクト名
body
:オブジェクトの本体
以下は入力例です。
object MyApp{
var name = "Kotlin"
var author = "Kotlin Project"
fun show(){
println("${name}:${author}")
}
}
fun main(){
MyApp.show()
}
クラスではなくインスタンスそのものの宣言なので、
コンストラクターは持てません。
オブジェクト式
Androidのアプリ開発では、イベントリスナーの宣言など、
その場限りのクラスを定義したいということがよくあります。
オブジェクト式の一般的な構文は以下の通りです。
object: parent{ body }
parent
:基底クラスまたはインターフェース
body
:クラス本体
入力例:
btn.setOnClickListener(object: View.OnClickListener{
overtire fun onClick(view:View){
Log.v("Kotlin","Clicked!")
}
})
コンパニオンオブジェクト
クラス内部でのオブジェクト宣言のことです。
以下はインスタンス生成するためのマーケットメソッド(任意のメソッド名で可)を、
コンパニオンオブジェクトで定義する例です。
class Person private constructor(var name:String){
companion object Market{
fun getInstance():Person{
return Person("山田")
}
}
override fun toString():String{
return "Person:${this.name}"
}
}
fun main(){
val person = Person.getInstance()
println(person)
}
実行結果は以下の通りです。
Person:山田
ここでPerson
クラスをprivate
宣言しているので、
クラス外部からはインスタンス化できません。
コンパニオンオブジェクトにはcompanion
キーワードを付与するだけです。
コンパニオンオブジェクト配下のメンバーは「クラス名.メンバー名」で呼び出せます。