🗺️

【Kotlin】 Data classでセカンダリコンストラクタ

2021/08/26に公開

Kotlinのコンストラクタについて

Kotlinのコンストラクタについて、Kotlin - コンストラクタに詳しくまとめられていますが、Javaと同様にclassに複数のコンストラクタ(セカンダリコンストラクタ)を設定することが可能です。
そして、Kotlinにはデータ保管の用途のクラスData classがあります。Data classについてはKotlin - Data class理解と実装方法に概要がまとめられていますが、プライマリコンストラクタにプロパティを設定していくのが基本的な使い方です。ただ、あまりやらないと思いますが、Data classでどうしてもセカンダリコンストラクタを使いたいという場合、どう実装すれば良いのか。ということで、今回記事に書いてみたいと思います。

対応方法

stackoverflowの記事Can Kotlin data class have more than one constructor?に、対応方法が書かれています。プライマリコンストラクタに加えて、constructor(name: String, age: Int) : this(name, age, null)の形式でプライマリコンストラクタを呼び出すことで、セカンダリコンストラクタを設定することができます。

実装サンプル

あまり無い例になってしまいますが、Data classのプライマリコンストラクタ以外で、どうしても別のプロパティを持ちたいという場合、セカンダリコンストラクタを使って以下のような実装ができます。

data class SampleUser(val id: String, val name: String) {
    var appendText = String()

    constructor(id: String, name: String, appendText: String) : this(id, name) {
        this.appendText = appendText
    }
}

Discussion