これは、Object が Integer と String のスーパークラスであるためです。一般的な関係を逆に解釈しています。
編集
この状況について考えてみてください。
List<? extends myClass> listOfMyClass = new ArrayList<Object>();
この場合、Object
型要素のリストになりますが、listOfMyClass
リストの宣言によって追加された制限を尊重する必要があります。
myClass
階層に属する任意のオブジェクトをリストに追加できます。ArrayList
インターフェイスを実装している は、要求されたときに型要素List
を保持 (および返し)します。Object
もちろん、次のように定義できます。
List<? extends myClass> listOfMyClass = new ArrayList<mySuperClass>();
お分かりかもしれませんが、 にはArrayList
、同じタイプまたはスーパータイプのオブジェクトが含まれている必要があります。myClass
この場合、それはmySuperClass
. このリストはmySuperClass
、要求されたときにオブジェクトを返します。
mySuperClassClassX
階層に属さないクラスとして、次の行はコンパイルされません。
List<? extends myClass> listOfMyClass = new ArrayList<ClassX>();
ClassX
は のスーパークラスではないためですmyClass
。