除了使用.isInstanceOf[ClassName]
还是完全匹配表达式之外,是否真的没有简单的惯用方法来检查对象是否是某个类?
单个类的匹配可以避免使用.AsInstanceOf
的必要性(在必要时对类别唯一成员进行操作),但一般来说非常冗长,并且要求明确涵盖默认情况。
也许会有一些用于处理类层次结构的库,它简化了将类分配给对象并检查它们,以绕过scala核心类匹配器的限制。我甚至考虑使用普通集合而不是使用scala类来实现我自己的类型赋值,层次结构和检查解决方案,以实现更加惯用的丰富层次结构类型建模。
答案 0 :(得分:4)
不,没有。故意使用语法冗长,因为必须使用此功能通常表示设计不良。
然而,您可以自己编写一个函数:
implicit class WithAs[T](x: T) {
import scala.reflect._
def as[O: ClassTag]: Option[O] = x match {
case o: O => Some(o)
case _ => None
}
}