0

ケースクラスに列挙型とオプションの両方がある場合、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なく動作します! Javaでインスタンス化する方法はありますか???bcEnumOption

4

1 に答える 1

0

編集:同じコードでエラーが発生しなくなりました。つまり、これは日食のバグであり、再現できません!


免責事項: これは、私が現在選択している回避策にすぎません。

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

上記の 2 つの方法のいずれかを使用します。

Option周りに多くの があり、組み合わせが急激に増える場合、これは明らかに実行可能な解決策ではありません。しかし、私の場合 (実際のアプリケーション) には、3 つの組み合わせがありました。もちろん、より良い解決策があることを願っています。

于 2015-12-15T10:43:17.797 に答える