【问题标题】:Instantiate a case class with Options and Scala Enumeration in Java在 Java 中使用 Options 和 Scala Enumeration 实例化案例类
【发布时间】:2015-12-15 10:14:12
【问题描述】:

如果一个案例类同时具有枚举和选项,我似乎无法从 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 显示错误),但 bc 工作正常!知道如何在 Java 中实例化 EnumOption 吗???

【问题讨论】:

  • 这是 scala 编译器中的错误吗? (或者可能只是 Eclipse 中的一个错误??)
  • 错误是找不到具有该签名的构造函数。我将在问题中添加确切的信息。
  • 我发现 IntelliJ 没有错误。你使用的是什么版本的 Java、Scala?
  • 我快疯了。现在我也看不到错误!所以这只是一个 Eclipse 错误,它是不可重现的! :( 我浪费在修复它上的时间太多了!

标签: java scala enumeration case-class scala-option


【解决方案1】:

编辑:现在相同的代码没有给我任何错误。所以这是一个 Eclipse 错误,并且无法重现!


免责声明:这只是我目前选择的一种解决方法。

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)
}

然后使用上述两种方法之一。

如果周围有很多 Options 并且组合会急剧增长,那么显然这不是一个可行的解决方案。但是对于我的情况(实际应用程序),我有三种组合。当然,我希望会有更好的解决方案。

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 2020-07-10
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多