2

データmongodbを永続化するために使用するScalaでいくつかのケースクラスを作成しています。クライアント アプリは Java で記述されており、これらのケース クラスのインスタンスを渡すことで私のリポジトリを使用しています。

オプションのフィールドを使用しない限り、問題なく動作します。

case class Person (name: String, email: Option[String])

JavaからScalaのオプションを参照したくないので、クライアントが次のようなものを呼び出せるようにするコンストラクターをオーバーライドしたいと思います

new Person("Jack", "jack@ripper.com");

コンパニオン オブジェクトのファクトリ メソッドも問題ありません。私は、スカラ deps なしで Java を記述できるようにするソリューションを探しています。できれば、コンストラクターを呼び出すよりも複雑ではありません。考え?

4

1 に答える 1

1

なぜこれが不十分なのですか?

case class Person (name: String, email: Option[String]) {
    def this(name: String, email: String) {
        this(name, Option(email))
    }
}

確かに、それはまだ を使用してOption[String]いますが、クライアントには見えないままです。唯一の問題は、Java クライアント コードが引き続き両方のコンストラクターを参照することです。

于 2012-01-10T17:41:40.623 に答える