Вы можете попробовать что-то вроде этого:
for (x <- l.view; y <- Some(x).collect { case b: B[_] => b }) println(y.v)
Не требует никаких isInstanceOf
или asInstanceOf
и никогда не падает, даже если ваш список содержит A
с, которые не B[_]
с. Он также не создает длинных списков в качестве промежуточных результатов, только небольшие недолговечные Option
с.
Не так кратко, но и гораздо менее удивительно:
for (x <- l) {
x match {
case b: B[_] => println(b.v)
case _ => /* do nothing */
}
}
Если бы вы могли изменить тип l
на List[B[_]]
, это было бы предпочтительным решением.