セカンダリコンストラクタの引数を加工して変更不能なプロパティの値とするには?
変更不能なプロパティはプライマリコンストラクタを介して初期化するしかないと思うのですが、セカンダリコンストラクタで計算した結果を使ってプライマリコンストラクタを呼ぶ方法が分からず困っています。
例として、プロパティ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のようなクラスはどう定義すればよいでしょうか?