1

Javaワイルドカードについて学んでいるときに、このテーマについて誤解していることに気づきました。

  1. Upper Boundジェネリック クラスのメンバーを読み取り専用にすることができます
  2. Lower Boundメンバーへの書き込みを許可しますが、それが型の下限である場合のみです
List<? extends Vehicle> vehicleList = new ArrayList<Car>(); 
vehicleList.add(new Scooter()); // Compile-time Error!

コンパイラは、リストの要素が正しい型であることを保証できないため、ここに何も記述できません (後で読むため)。

List<? super Car> carList = new ArrayList<Car>();
carList.add(new Car()); // Ok
carList.add(new Vehicle()); // Compile-time Error

これは、コンパイラが最下位の型が常に Car であることを保証できるために発生します。そして、Carのみを渡すことができます。私は正しいですか?

4

2 に答える 2

2

List<? super Car>これは抽象型であることを忘れないでください。この型のオブジェクトの実際の具象クラスについて考えてみてください。これらはすべて可能性であり、明らかに他にもあります。

  • ArrayList <車>
  • ArrayList <乗り物>
  • ArrayList <オブジェクト>
  • LinkedList <車>
  • LinkedList <乗り物>
  • LinkedList <オブジェクト>

現在、ArrayList<Car>andLinkedList<Car>はクラスが であるオブジェクトの追加を許可していないため、コンパイラはifが タイプの場合Vehicleに書き込むことを許可できません。carList.add(new Vehicle())carListList<? super Car>

于 2013-10-28T19:27:12.327 に答える