当`B类扩展A`和'L <:A`时,为什么`List [B]`不是`Seq [L]`的子类型?

Ale*_*sev 2 scala scala-collections

有:

class A
class B extends A
Run Code Online (Sandbox Code Playgroud)

写是正确的:

val foo: Seq[A] = List[B](new B)
Run Code Online (Sandbox Code Playgroud)

在发生错误时我会错过什么?

def bar[L <: A](): Seq[L] = List[B](new B)
Run Code Online (Sandbox Code Playgroud)

错误:

[error]  found   : List[B]
[error]  required: Seq[L]
[error]     def t[L <: A](): Seq[L] = List[B](new B)
Run Code Online (Sandbox Code Playgroud)

Tra*_*own 6

你的bar方法的签名本质上是说,告诉我一些子类型,A我会给你一系列类型的东西.有可能有很多的亚型AB没有的(即,所有的人都在此情况下)亚型,所以实现这种方法List[B](new B)是行不通的.

更具体地说:假设您的代码已编译,然后我写了以下内容:

class NotB extends A {
  def doSomething(): Unit
}

bar[NotB]().head.doSomething()
Run Code Online (Sandbox Code Playgroud)

这也需要编译,但没有任何意义.