Open3

Kotlinで無名クラスを作る / シングルトンを作る

mtkw0127mtkw0127

Kotlinで無名クラスを作る場合はobjectというキーワードを使う。

無名クラスの便利ポイント
- 一度だけ利用したいクラス

  • ゼロから定義することも既存のクラスを継承することもできる

無名クラス(anonymous class)のインスタンスは無名オブジェクト(anonymous object)という

https://kotlinlang.org/docs/object-declarations.html

mtkw0127mtkw0127
open class Sample
interface SampleInterface
val sampleObject: Sample = object : Sample(), SampleInterface {}

クラスを継承しインターフェースを実装した無名オブジェクト。
その場合は: Sampleという風に型を明示する必要がある。

mtkw0127mtkw0127

無名オブジェクトを戻り値として使った場合

https://kotlinlang.org/docs/object-declarations.html#using-anonymous-objects-as-return-and-value-types

open class Sample {
    fun createObject() = object {
        val x: String = "x"
    }

    fun innerMethod() {
        val obj = object {
            val x: String = "x"
        } // <anonymous object : Any>
        println(obj.x) // アクセス可能
    }
}

fun main() {
    val obj = sampleObject.createObject() // Any型
}

インスタンス外から無名オブジェクトを返すメソッドをcallした場合、Any型となりxにはアクセスできない
インスタンス内から無名オブジェクトを返すメソッドをcallした場合、<anonymous object : Any>となりxにアクセスできる