如何为包含可选字段的案例类创建Java友好API

时间:2012-01-10 17:29:00

标签: scala api-design scala-java-interop

我在Scala中创建了一些用于保存数据mongodb的案例类。客户端应用程序是用Java编写的,并通过传入这些案例类的实例来使用我的存储库。

它工作正常,除非我使用可选字段:

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

现在来自Java我不想引用Scala的Option,所以我更喜欢覆盖一个允许客户端调用类似

的构造函数
new Person("Jack", "jack@ripper.com");

伴侣对象上的工厂方法也可以。我正在寻找一种解决方案,允许我在没有任何scala deps的情况下编写Java,最好不要比调用构造函数更复杂。想法?

1 个答案:

答案 0 :(得分:1)

为什么这不足够?

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

当然,它仍然使用Option[String],但它仍然对客户端不可见。唯一的问题是Java客户端代码仍然会看到两个构造函数。