問題はメソッドの戻り型ではなくGeneric Type、クラスにバインドされていることですMixer。
何が悪かったのか見てみましょう:-
public <C extends Cat> Mixer<? super Dog> useMe(A a, C c)
返品タイプMixer<? super Dog>とは、任意MixerのタイプDogまたはsuper-type犬のを返品できることを意味しますAnimal。
//return new Mixer<Object>();//KO
return new Mixer<Animal>(); //OK
したがって、とはの両方であるため、両方のreturnステートメントは正常に機能します。AnimalObjectsuper-typeDog
しかし、が適合しない理由はfirst one、クラスを次のように宣言しているためです。
public class Mixer<A extends Animal>
したがって、またはそのクラスのいずれかに関連付けることができるboundあなたがあります。さて、はのサブタイプではないので、単に作成することはできません:-typeMixerAnimalsubtypeObjectAnimal
new Mixer<Object>();
したがって、次のようにクラスのインスタンスを作成できます。-
new Mixer<Animal>(); // OR
new Mixer<Dog>(); // Dog extends Animal // OR
new Mixer<Cat>(); // Cat extends Animal
// **** But NOT like this ******
new Mixer<Object>(); // Object does not extend Animal