trait Node[N<:Node[N]] { self:N =>
}
trait A extends Node[A]
trait B {
def list:List[Node[_]]
def as:List[A] = list.collect { case x:A => x }
}
У меня проблемы с использованием саморекурсивного типа в коллекциях. В этом примере компилятор выдает ошибку
def as = list.collect { case x:A => x }
^
type arguments [_$1] do not conform to trait Node's type parameter bounds [N <: Node[N]]
потому что подстановочный знак в List [Node [_]] не соответствует границе типа. Есть ли какой-нибудь правильный способ указать тип шаблона для рекурсивного ограничения?
Один обходной путь -
def as = {
list match {
case list:List[Node[n]] => list.collect { case x:A => x }
}
}
, что довольно некрасиво.