2017-08-05 8 views
1

で作業していないようです。バウンドは、次のコードを考えると共分散

ThirdParty.getAnimalのタイプはMyption [猫]で、コールはそれがgetOrElseの定義に準拠していない Myption[Cat].getOrElse(new BlackCat),に相当し、Aは、猫とBはBを破った、ここBlackCatです>:

答えて

1
val opt3: Animal = ThirdParty.getAnimal.getOrElse(new BlackCat) 

BBlackCatではありません。 Bのタイプは、必要な仕様に適合する最も特定のタイプになります。引数はnew BlackCatなので、我々はB >: BlackCatを知っています。 getOrElseの要件によって、我々はB >: Catを知っている。これらの要件の両方を満たす最も具体的なタイプは、当然、Catです。

+0

ありがとう@ silvio-mayolo。そして、 'getOrElse'の引数は何でも(Any型)、例えば:' ThirdParty.getAnimal.getOrElse(1) ' – Tom

+0

です。そうです。 'ThirdParty.getAnimal.getOrElse(1)'は 'Any'型の引数を返します。私はそれを個人的にテストしました。それはあなたが言ったように正確に動作します。 –

関連する問題