私は、主なコンストラクタがコンマで区切られた文字列として "friends"を取るScalaのcaseクラスを持っています。セカンダリ(オーバーロードされた)コンストラクタは "friends"をArray [String]として受け取り、プライマリコンストラクタを呼び出します。何らかの理由で、プライマリコンストラクタの "friends"はStringでなければならず、オーバーロードされたコンストラクタではArray [String]でなければなりません。Scalaは、オーバーロードされたコンストラクタに 'this'以外のステートメントを持たせることができますか?
mkStringを呼び出す前に友人がヌルかどうかチェックする必要があると思いますが、 "if" statmentを使ってチェックしようとしましたが、コンパイルして友人を配列として再認識していないようです私はisEmptyを呼び出すことを許可していないので、スカラーは "?:"演算子と似ているので、一次コンストラクターの呼び出し内で友人をチェックできますか?
case class Person(val friends: String)
{
def this(friends: Array[String]) =
{
if (!friends.isEmpty)
// doesn't compile, error message: 'this' expected but 'if' found
this(friends.mkString(",") // throw NULL pointer exception
// can I do "this((friends.isEmpty)?"":friends.mkString(","))" here ?
}
}
エラーメッセージは何ですか? –
エラーメッセージは 'これは予想されますが、'が見つかった場合です。 – jlp