Как сделать дружественный к Java API для классов дел с необязательными полями - PullRequest
2 голосов
/ 10 января 2012

Я создаю некоторые классы дел в Scala, которые я использую для сохранения данных mongodb.Клиентское приложение написано на Java и использует мой репозиторий, передавая экземпляры этих классов дел.

Это работает нормально, если я не использую необязательные поля:

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

Теперь из Java я надеваюЯ не хочу ссылаться на Option Scala, поэтому я бы предпочел переопределить конструктор, который позволяет клиенту вызывать что-то вроде

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

. Заводской метод для объекта-компаньона также будет в порядке.Я ищу решение, которое позволило бы мне писать на Java без каких-либо ошибок, предпочтительно не более замысловатых, чем вызов конструктора.Мысли?

1 Ответ

1 голос
/ 10 января 2012

Почему этого недостаточно?

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

Конечно, он все еще использует Option[String], но он остается невидимым для клиента.Единственная проблема заключается в том, что клиентский код Java по-прежнему будет видеть оба конструктора.

...