在 Java 中使用选项和 Scala 枚举实例化案例 class
Instantiate a case class with Options and Scala Enumeration in Java
似乎如果案例 class 同时具有枚举和选项,我无法从 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"));
我在实例化 a
时遇到错误(至少 Eclipse 向我显示错误),但 b
和 c
工作正常!知道如何在 Java 中实例化 EnumOption
吗???
编辑:现在相同的代码没有给我任何错误。所以这是一个eclipse bug,不可重现!
免责声明:这只是我目前选择的一种解决方法。
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
并且组合会急剧增长,那么这不是一个可行的解决方案。但是对于我的情况(实际应用程序),我有三种组合。当然希望有更好的解决办法
似乎如果案例 class 同时具有枚举和选项,我无法从 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"));
我在实例化 a
时遇到错误(至少 Eclipse 向我显示错误),但 b
和 c
工作正常!知道如何在 Java 中实例化 EnumOption
吗???
编辑:现在相同的代码没有给我任何错误。所以这是一个eclipse bug,不可重现!
免责声明:这只是我目前选择的一种解决方法。
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
并且组合会急剧增长,那么这不是一个可行的解决方案。但是对于我的情况(实际应用程序),我有三种组合。当然希望有更好的解决办法