迭代Scala枚举中的重写值

时间:2015-09-17 10:44:33

标签: java scala enums iteration

我目前正在尝试复制Scala中显示的here Java枚举。这是我到目前为止所做的:

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

但是,当我在Scala 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和String的枚举常量的最好方法。

1 个答案:

答案 0 :(得分:0)

这将使其编译

  

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