【发布时间】:2016-10-25 21:43:34
【问题描述】:
我有一个这样定义的特征:
sealed trait MyTrait[+A] {
def name: String
def id: Long
def someType: A
}
我现在有一些案例类扩展了这个特性,如下所示:
object MyTrait {
case class One[+A](name: String, id: Long, someField: String, someType: A) extends MyTrait[A]
case class Two[+A](name: String, id: Long, someField: String, someType: A) extends MyTrait[A]
case class Three[+A](name: String, id: Long, someType: A) extends MyTrait[A]
}
现在,我有一个可能包含这些案例类之一的列表,我必须从给定的列表中收集各个案例类,并使用 instanceOf 检查如下:
val myBigList = List(One[SomeType], Two[SomeType], Three[SomeType], One[SomeType])
val allOnes = myBigList.collect {
case elem if elem.isInstanceOf[One[_]] => elem.asInstanceOf[One]]
}
val allTwos = myBigList.collect {
case elem if elem.isInstanceOf[Two[_]] => elem.asInstanceOf[Two]]
}
val allThrees = myBigList.collect {
case elem if elem.isInstanceOf[Three[_]] => elem.asInstanceOf[Three]]
}
有没有更好的方法?我的意思是有没有办法避免 isInstanceOf 和 asInstanceOf?
【问题讨论】:
标签: scala