Я играю с scala, и я пытался создать метод, который бы возвращал список экземпляров, отфильтрованных по заданному типу (передаваемых через параметры функции):
Я попробовал следующее, но он даже не компилируется:
trait A
trait B extends A
trait C extends A
case class B1() extends B {}
case class B2() extends B {}
case class C1() extends C {}
case class C2() extends C {}
def filterByType[F <: A](list: List[A], t: Class[F]): List[F] = list flatMap {
case f: F => Some(f)
case _ => None
}
val list: List[A] = List(B1(), B2(), C1(), C2()) // type of A
val filteredList: List[B] = filterByType(list, Class[B]) // This should return a sublist like List(B1(), B2()) and be type of B
println(filteredList)
Есть ли способ сделать что-то подобное в scala? Каков будет правильный способ сделать это? Спасибо!
РЕДАКТИРОВАТЬ: Я также попытался передать classOf[B]
безуспешно либо.