确定Any实际上是scala枚举值

时间:2015-05-01 00:13:36

标签: scala enums

我有一个字符串格式化函数fmt(v:Any): String,需要根据v的运行时类型执行不同的操作。所以它看起来像:

def fmt(v:Any): String = {
  v match {
    case a: Int => "Int: " + a
    case a: String => "\"" + a + "\""
    case a => throw new IllegalArgumentException(s"??? '$a', ${a.getClass.getCanonicalName}?!")
  }
}

当我传入scala枚举值时,会抛出IllegalArgumentException("??? 'myVal', scala.Enumeration.Val?!")。但是,添加一个

case a: scala.Enumeration.Val => "Hello enum"

不编译:对象枚举不是包scala的成员 注意:类Enumeration存在,但它没有伴随对象。

如何检测传入的实例是否为scala枚举值?

if (a.getClass.getCanonicalName == "scala.Enumeration.Val")应该可以工作,但感觉就像是一个黑客 - 我可以做任何实际类型的模式匹配吗?

0 个答案:

没有答案