我有一个字符串格式化函数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")
应该可以工作,但感觉就像是一个黑客 - 我可以做任何实际类型的模式匹配吗?