Kotlin でby キーワードを使ってコレクションオブジェクトを簡単に実装する
コレクションオブジェクトを実装する際、Kotlin だとby キーワードを使って実装をシンプルにすることができます。
例えば、
data class SampleData( val title: String, val body: String )
という値オブジェクトがあり、これを内包するSampleCollection というものを定義します。
data class SampleCollection ( private val list: List<SampleData> ) { val size: Int get() = list.size fun get(index: Int): SampleData { return list.get(index) } }
list プロパティは直接参照されたくないので、private にし、コレクションオブジェクトが必要なメソッドを実装してlist プロパティに転送します。
これはよく見られるコレクションオブジェクトのパターンですが、Kotlin の場合これをシンプルにできます。
data class SampleCollection ( private val list: List<SampleData> ) : List<SampleData> by list
とします。
: List
ですので、SampleCollection がList インタフェースを実装しているという形になり、
by [property名]
で指定されたプロパティにメソッドを転送できます。
使用してみましょう。
val sampleData = SampleData( "SampleTitle", "SampleBody" ) val sampleCollection = SampleCollection(listOf(sampleData)) sampleCollection.size // => 1 val sampleData = sampleCollection.get(0) sampleData.title // => SampleTitle