1
で作業していないようです。バウンドは、次のコードを考えると共分散
ThirdParty.getAnimal
のタイプはMyption [猫]で、コールはそれがgetOrElseの定義に準拠していない Myption[Cat].getOrElse(new BlackCat),
に相当し、Aは、猫とBはBを破った、ここBlackCatです>:
で作業していないようです。バウンドは、次のコードを考えると共分散
ThirdParty.getAnimal
のタイプはMyption [猫]で、コールはそれがgetOrElseの定義に準拠していない Myption[Cat].getOrElse(new BlackCat),
に相当し、Aは、猫とBはBを破った、ここBlackCatです>:
val opt3: Animal = ThirdParty.getAnimal.getOrElse(new BlackCat)
B
はBlackCat
ではありません。 B
のタイプは、必要な仕様に適合する最も特定のタイプになります。引数はnew BlackCat
なので、我々はB >: BlackCat
を知っています。 getOrElse
の要件によって、我々はB >: Cat
を知っている。これらの要件の両方を満たす最も具体的なタイプは、当然、Cat
です。
ありがとう@ silvio-mayolo。そして、 'getOrElse'の引数は何でも(Any型)、例えば:' ThirdParty.getAnimal.getOrElse(1) ' – Tom
です。そうです。 'ThirdParty.getAnimal.getOrElse(1)'は 'Any'型の引数を返します。私はそれを個人的にテストしました。それはあなたが言ったように正確に動作します。 –