我有一个将字符串转换为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!

10-07 16:33