我目前正在尝试复制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的枚举常量的最好方法。
答案 0 :(得分:0)
这将使其编译
values.toArray.map(_。asInstanceOf [PRDataType])