Создание экземпляра класса case с помощью Options и перечисления Scala в Java

Кажется, что если в классе case есть как перечисления, так и опции, я не могу создать его экземпляр из Java.

Рассмотрим следующее в Scala:

object WeekDay extends Enumeration {
    type WeekDay = Value
    val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
  }
case class EnumOption(e: WeekDay.Value, s: Option[String])
case class EnumOnly  (e: WeekDay.Value, s: String)
case class OptionOnly(e: Int, s: Option[String])

И следующее в Java, чтобы использовать их:

scala.Enumeration.Value monday = WeekDay.Mon();
EnumOption a = new EnumOption(monday, Option.apply("12"));
EnumOnly b = new EnumOnly(monday, "12");
OptionOnly c = new OptionOnly(12, Option.apply("12"));

Я получаю ошибку (по крайней мере, Eclipse показывает мне ошибку) при создании экземпляра a но b а также c работать просто отлично! Любая идея, как я могу создать экземпляр EnumOption на яве???

1 ответ

Решение

РЕДАКТИРОВАТЬ: Теперь тот же код не дает мне ошибки. Так что это была ошибка затмения, и она не воспроизводима!


Отказ от ответственности: это только обходной путь, который я выбрал в настоящее время.

case class EnumOption(e: WeekDay.Value, s: Option[String])
object EnumOption {
  def optionAvailable(e: WeekDay.Value, s: String) = new EnumOption(e, Some(s))
  def notAvailable(e: WeekDay.Value) = new EnumOption(e, None)
}

и затем используйте любой из двух методов выше.

Очевидно, что это не жизнеспособное решение, если есть много Optionвокруг, и комбинации будут расти радикально. Но для моего случая (реального приложения) у меня было три комбинации. Конечно, я надеюсь, что будет лучшее решение.

Другие вопросы по тегам