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

Kotlinで無名クラスを作る場合はobjectというキーワードを使う。
無名クラスの便利ポイント
- 一度だけ利用したいクラス
- ゼロから定義することも既存のクラスを継承することもできる
無名クラス(anonymous class)のインスタンスは無名オブジェクト(anonymous object)という

open class Sample
interface SampleInterface
val sampleObject: Sample = object : Sample(), SampleInterface {}
クラスを継承しインターフェースを実装した無名オブジェクト。
その場合は: Sampleという風に型を明示する必要がある。

無名オブジェクトを戻り値として使った場合
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にアクセスできる