我有一个方法将字符串转换为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枚举对象。
有没有人有任何想法?感谢
答案 0 :(得分:3)
给出Java枚举:
public enum C {
ONE, TWO
}
Scala enum:
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!
答案 1 :(得分:0)
对于java枚举转换为java.lang.Enum