申し訳ありませんが、私はここで何が起こっているのか分かりませんので、これ以上の有益なタイトルや問題を策定できません。なぜこのコードはコンパイルされません:ワイルドカードを使用した型パラメータに関連する奇妙なコンパイルエラー
class Foo
class Bar[+R <: Foo] { def bar = "bar" }
class Bak(val b: Bar[_])
val bak = new Bak(new Bar[Foo])
bak.b.bar // fine
println(bak.b) // fine
bak.b // oops!
^^^ type arguments [Any] do not conform to class Bar's type parameter bounds [+R <: Foo]
これはなんですか?なぜ私は変数を使用できますか? 誰にも意味がありますか? ワイルドカードタイプ
ワイルドカード 'class Bak(val b:Bar [_ <:Foo])'をバインドすることはできますが、なぜそれがエラーを待つのかわかりません。ワイルドカードのvalに設定しても動作しないようです。 –
@MichaelZajacまあ、そうです...私は 'class Bak(val v:Bar [Foo])'を共分散のために使うこともできます。私は、この場合ワイルドカードを使用する唯一の理由は簡潔であるため、Fooを綴る必要はありませんが、境界を明示的に打ち込むことは、その目的をはっきりと破る必要があります:( – Dima
'Bar [_]' –