2

持つ:

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)
4

1 に答える 1

6

あなたのメソッドの署名barは本質的に言っています、いくつかのサブタイプを教えてください、Aそして私はあなたにそのタイプのもののシーケンスを与えます。Aのサブタイプではない のサブタイプが多数存在する可能性があるためB(つまり、この場合はすべて)、そのようなメソッドの実装List[B](new B)は機能しません。

より具体的には、コードがコンパイルされ、次のように書いたとします。

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

bar[NotB]().head.doSomething()

これもコンパイルする必要がありますが、意味がありません。

于 2013-08-13T19:01:14.410 に答える