2015-09-17 19 views
0

我正在嘗試複製Scala中顯示的here的Java枚舉。這是我到目前爲止有:在Scala枚舉中迭代重寫的值

object DataType extends Enum { 
    val BYTE = CCSValue(classOf[Byte], classOf[java.lang.Byte], "byte") 
    val SHORT = CCSValue(classOf[Short], classOf[java.lang.Short], "short") 
    val INTEGER = CCSValue(classOf[Int], classOf[Integer], "int") 
    val LONG = CCSValue(classOf[Long], classOf[java.lang.Long], "long") 
    val CHARACTER = CCSValue(classOf[Char], classOf[Character], "char") 
    val FLOAT = CCSValue(classOf[Float], classOf[java.lang.Float], "float") 
    val DOUBLE = CCSValue(classOf[Double], classOf[java.lang.Double], "double") 
    val BOOLEAN = CCSValue(classOf[Boolean], classOf[java.lang.Boolean], "boolean") 

    class PRDataType(val primitive: Class[_], val reference: Class[_], name: String) extends Val(nextId, name) 
    protected final def CCSValue(primitive: Class[_], reference: Class[_], name: String): PRDataType = new PRDataType(primitive, reference, name) 

    private val CLASS_MAP = new mutable.HashMap[Class[_], PRDataType]() 

    for (item: PRDataType <- values.toArray) { 
    CLASS_MAP.put(item.primitive, item) 
    CLASS_MAP.put(item.reference, item) 
    } 
} 

然而,當我在斯卡拉REPL執行此,我得到以下錯誤:

location\of\script\test.scala:18: error: type mismatch; 
found : Main.$anon.DataType.PRDataType => Option[Main.$anon.DataType.PRDataType] 
required: Main.$anon.DataType.Value => ? 
    for (item: PRDataType <- values.toArray) { 
         ^

我是不是真的很傻?我是新來的Scala,這是我能找到的最好的方式來定義不僅僅是一個id和一個字符串的枚舉常量。

回答

0

這將使編譯

values.toArray.map(_.asInstanceOf[PRDataType])

+0

的偉大工程。謝謝! – TheReturningVoid