2015-12-15 114 views
0

看起來如果案例類同時具有枚舉和選項,我不能從Java實例化它。在Java中使用Options和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")); 

I(至少Eclipse中顯示我的錯誤)上實例a得到一個錯誤,但bc工作得很好!任何想法如何在Java中實例化EnumOption

+0

這是scala編譯器中的錯誤嗎? (或者可能只是Eclipse中的一個bug?) – Mahdi

+0

什麼是錯誤? – tuxdna

+0

錯誤是沒有找到具有該簽名的構造函數。我會將確切的消息添加到問題中。 – Mahdi

回答

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

然後使用上述兩種方法之一。

很明顯,如果周圍有很多Option秒,組合將會大幅增長,這不是一個可行的解決方案。但對於我的情況(真正的應用),我有三種組合。當然,我希望會有更好的解決方案。