重複の可能性:
java generics スーパー キーワード
私の知識を以下のサンプルプログラムに関連付けることができません。以下のサンプルプログラムを参照してください。私の疑問はそのプログラムの下にあります。
import java.util.*;
class A { }
class B extends A { }
class C extends B { }
public class sampleprog {
public static void main(String[] args) {
List<? super A> list1 = new ArrayList<A>();
list1.add(new A());//valid. ok
list1.add(new B());//valid, why? it is not super to A?
list1.add(new C());//valid, why? it is not super to A?
List<? super B> list2 = new ArrayList<A>();
list2.add(new A());//not valid. why? it is also super to B!!!
list2.add(new B());
list2.add(new C());
List<? super C> list3 = new ArrayList<C>();
list3.add(new A());//not valid, why? It is super to A so should be valid!!!
list3.add(new B());//not valid, why? It is super to A so should be valid!!!
list3.add(new C());
}
}
私の疑問: - 私が知る限り、? super T
追加できるクラスを意味しますがT
、ここでは出力が異なりますか? サブクラスも正常に追加されましたが、これは完全に混乱しています。・出力はリスト初期化( List<? super C> list3 = new ArrayList<C>();
)と変わらない。この初期化では、A
orのリストを割り当てましたがB
、出力は同じでした!
私の疑問を解消してください。