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)
你的bar方法的签名本质上是说,告诉我一些子类型,A我会给你一系列类型的东西.有可能有很多的亚型A是B没有的(即,所有的人都在此情况下)亚型,所以实现这种方法List[B](new B)是行不通的.
更具体地说:假设您的代码已编译,然后我写了以下内容:
class NotB extends A {
def doSomething(): Unit
}
bar[NotB]().head.doSomething()
Run Code Online (Sandbox Code Playgroud)
这也需要编译,但没有任何意义.
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |