2015-12-15 56 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秒,组合将会大幅增长,这不是一个可行的解决方案。但对于我的情况(真正的应用),我有三种组合。当然,我希望会有更好的解决方案。