有:
class A
class B extends A
写这是正确的:
val foo: Seq[A] = List[B](new B)
错误时我会错过什么?
def bar[L <: A](): Seq[L] = List[B](new B)
错误:
[error] found : List[B]
[error] required: Seq[L]
[error] def t[L <: A](): Seq[L] = List[B](new B)
答案 0 :(得分:6)
bar
方法的签名基本上是在说,告诉我一些A
的子类型,我会给你一系列类型的东西。 A
可能存在很多B
的子类型,而List[B](new B)
不是子类型(在这种情况下,所有这些子类型),因此实现class NotB extends A {
def doSomething(): Unit
}
bar[NotB]().head.doSomething()
这样的方法不会工作。
更具体地说:假设您的代码已编译,然后我写了以下内容:
{{1}}
这也需要编译,但它没有任何意义。