【发布时间】:2019-07-09 23:57:20
【问题描述】:
我正在尝试在 Scala 中使用 case switch 语句来检查 Java Class 对象代表的类/类型。我不能传递实际的对象,但我可以获得类,我需要根据该类对象执行不同的逻辑。例如,
def foo(classObj: Class[_]): Any = {
classObj match {
case map: Map[String, String] => doMapThings()
case str: String => doStringThings()
}
}
但是,这并没有真正起作用,因为 case 语句正在查看 Class 的类型,即 Class,并且永远不会是 Map 或 String。如何获取 classObj 代表的类型/类并与之匹配?
【问题讨论】:
-
你能解释一下这件事的背景吗?传递一个类对象并返回
Any感觉就像是在对抗类型系统而不是使用它。为什么不能传递对象?
标签: scala reflection pattern-matching type-erasure