Kotlinのobjectを理解する【Androidアプリ開発】

object
を使っていくつか遊びがてら実験してみた。オブジェクトに関してもやもやしていたが少しだけつかめてきた気がする。
companion objectでシングルトンの動作確認
Kotlinでcompanion object
を使って、JavaのStaticみたいな動作を行ってみた。次のHoge
クラスはシングルトンパターンの基本的な形である。
class Hoge {
companion object{
var counter:Int = 0
}
fun countUp():Int {
return counter++
}
}
fun main() {
val hoge1 = Hoge()
("hoge1 : ${hoge1.countUp()}")
println("hoge1 : ${hoge1.countUp()}")
println("hoge1 : ${hoge1.countUp()}")
println("hoge1 : ${hoge1.countUp()}")
println
val hoge2 = Hoge()
("hoge2 : ${hoge2.countUp()}")
println("hoge2 : ${hoge2.countUp()}")
println("hoge2 : ${hoge2.countUp()}")
println("hoge1 : ${hoge1.countUp()}")
println
}
実行結果は次の通りとなる。確かにcompanion object
で囲まれた変数counter
はインスタンスが1つだけとなっているようだ。
hoge1 : 0
hoge1 : 1
hoge1 : 2
hoge1 : 3
hoge2 : 4
hoge2 : 5
hoge2 : 6
hoge1 : 7
メソッドの関数オブジェクト
次のプログラム内のように、関数自体をオブジェクトとして扱う使うことができる。ただし、Hogeクラスのインスタンスを生成する必要がある。
class Hoge {
var counter:Int = 0
fun countUp():Int {
return counter++
}
}
fun main() {
val hoge = Hoge()
val countUp = hoge::countUp
("countUp1 : ${countUp()}")
println("countUp1 : ${countUp()}")
println("countUp1 : ${countUp()}")
println("countUp1 : ${countUp()}")
println
}
実行結果は次の通り。
countUp1 : 0
countUp1 : 1
countUp1 : 2
countUp1 : 3
インタフェースとオブジェクトの組み合わせ
次のプログラムはOkHttpのCallbackで使うようなパターンだ。
interface Hoge {
var counter:Int
fun countUp():Int
}
val hoge = object:Hoge {
{
init = 0
counter }
override var counter: Int
get() {
("counter ゲット ($field)")
printlnreturn field
}
set(value) {
("counter セット (${value})")
println= value
field }
override fun countUp(): Int {
++
counterreturn counter
}
}
fun main() {
.countUp()
hoge.countUp()
hoge.countUp()
hoge.countUp()
hoge.countUp()
hoge
}
実行結果は次の通りとなる。
counter セット (0)
counter ゲット (0)
counter セット (1)
counter ゲット (1)
counter ゲット (1)
counter セット (2)
counter ゲット (2)
counter ゲット (2)
counter セット (3)
counter ゲット (3)
counter ゲット (3)
counter セット (4)
counter ゲット (4)
counter ゲット (4)
counter セット (5)
counter ゲット (5)
関連記事
- Java開発が爆速に!超便利なJShellの使い方
- JavaScript の参照渡しと使用メモリ
- PHP で Slim を使ったルーティング
- 【Python】VidStabで手ぶれ補正【動画編集への道#2】