はじめに
Kotlinには名前付き引数を利用することができるので、
コンストラクタに渡す引数をわかりやすく記述することができます。
Person( name = "taro", age = 20 )
しかし、JavaとKotlinが混在している場合は、Javaからは名前付き引数の仕組みを利用できません。
そうした場合には、KotlinのclassにBuilderを定義することで、
Java、Kotlin両方から扱いやすいclassにすることができます。
data classにBuilderを定義した例
以下の例はKotlinのdata classにBuilderを定義したものです。
data class Person( val name : String, val age : Int ) { class Builder( private var name : String? = null, private var age : Int? = null ) { fun name(name : String) = this.also { it.name = name } fun age(age : Int) = this.also { it.age = age } fun build() = Person(this.name!!, this.age!!) } companion object { @JvmStatic fun builder() = Builder() } }
Kotlin・Javaからの呼び出し方
このdata classは、Kotlinからは冒頭と同様に下記の形でインスタンスを作成できますし、
Person( name = "taro", age = 20 )
Javaからはこのように呼ぶことができます。
Person.builder() .name("taro") .age(20) .build();
より良い書き方があるかもしれないので、ご存知の方はコメントなどでお知らせください。