我有一个将字符串转换为int并将Java枚举转换为int的方法。对于其他数据类型,它不进行任何转换。
def myConverter[T](attributeValue: T) = {
if (attributeValue.isInstanceOf[String]) {
attributeValue.asInstanceOf[String].toInt
} else if (attributeValue.isInstanceOf[Enumeration$Value]) {
CodeReferenceEx.toInteger(attributeValue.asInstanceOf[Enumeration$Value])
} else {
attributeValue
}
}
该方法永远不会进入
elseif
块(Enumeration$Value
),因为条件始终被评估为false。我正在使用Java枚举对象。有谁有想法吗?谢谢
最佳答案
给定一个Java枚举:
public enum C {
ONE, TWO
}
和一个Scala枚举:
object E extends Enumeration {
val A = Value
}
这两种方法均适用:
def myConverter[T](attributeValue: T) = {
attributeValue match {
case str: String =>
str.toInt
case _: Enumeration =>
println("Scala Enum!")
case _: Enumeration#Value =>
println("Scala Enumeration Value!")
case _ if attributeValue.getClass.isEnum =>
println("Java Enum!")
case _ => println("oops")
}
}
def main(args: Array[String]): Unit = {
myConverter(E)
myConverter(E.A)
myConverter(C.ONE)
}
产量:
Scala Enum!
Scala Enumeration Value!
Java Enum!