如何测试Java对象是否是scala中的枚举?

时间:2017-07-17 13:51:51

标签: java scala

我有一个方法将字符串转换为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枚举对象。

有没有人有任何想法?感谢

2 个答案:

答案 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