セカンダリコンストラクタの引数を加工して変更不能なプロパティの値とするには?
変更不能なプロパティはプライマリコンストラクタを介して初期化するしかないと思うのですが、セカンダリコンストラクタで計算した結果を使ってプライマリコンストラクタを呼ぶ方法が分からず困っています。
例として、プロパティname
と2つのコンストラクタを持つクラスPerson
を考えてみます。セカンダリコンストラクタでlongName
をスペース区切りでつなぎあわせて、それをname
の値としたいのですが、プライマリコンストラクタの呼出し(this
)ではコードブロック中の変数が使えないため、計算した文字列を渡すことが出来ません。
class Person(val name: String) {
constructor(vararg longName: String) /* : this(sj.toString()) */ {
val sj = java.util.StringJoiner(" ")
longName.forEach { sj.add(it) }
}
}
Person
のようなクラスはどう定義すればよいでしょうか?