Scala F-有界类型集合上的函数应用

Scala F-有界类型集合上的函数应用,scala,polymorphism,f-bounded-polymorphism,Scala,Polymorphism,F Bounded Polymorphism,我一直在尝试学习更多Scala,并讨论了F-有界类型。我对关于使用此类类型的值集合的最后讨论特别感兴趣 下面是一个简单的例子: abstract class AbsClass[A <: AbsClass[_]] { this: A => def me: A = this } def me2[A <: AbsClass[A]](a: A): A = a case class C1(v: Int) extends AbsClass[C1] case class C2(

我一直在尝试学习更多Scala,并讨论了F-有界类型。我对关于使用此类类型的值集合的最后讨论特别感兴趣

下面是一个简单的例子:

abstract class AbsClass[A <: AbsClass[_]] {
  this: A =>
  def me: A = this
}

def me2[A <: AbsClass[A]](a: A): A = a

case class C1(v: Int) extends AbsClass[C1] 
case class C2(v: Int) extends AbsClass[C2] 
现在,我一直在尝试列表类型的几个变体, 我希望有经验的人能指出其中的一些微妙之处 我错过了

下面的工作正如我预期的那样

scala> val l2  =  List[A forSome {type A <: AbsClass[A] }](C1(1), C2(2))
l2: List[A forSome { type A <: AbsClass[A] }] = List(C1(1), C2(2))

scala> l2.map(_.me)
res4: List[A forSome { type A <: AbsClass[A] }] = List(C1(1), C2(2))
但是,当我再次尝试将相同的映射应用于
l
时,我会丢失类型信息和
我被一个
列表[任何]
困住了。这里有没有办法保持这个类型

请记住,下划线是一个类型绑定

val l: List[AbsClass[_]] = List(C1(1), C2(2)).map(_.me)

val ll: List[AbsClass[_ >: Nothing <: Any]] = List(C1(1), C2(2)).map(_.me)
val l:List[AbsClass[]]=List(C1(1),C2(2)).map(u.me)
val ll:List[AbsClass[\u>:无
scala> val l: List[AbsClass[_]] = List(C1(1), C2(2)).map(_.me)
l: List[AbsClass[_]] = List(C1(1), C2(2))
val l: List[AbsClass[_]] = List(C1(1), C2(2)).map(_.me)

val ll: List[AbsClass[_ >: Nothing <: Any]] = List(C1(1), C2(2)).map(_.me)