ホームページ >Java >&#&チュートリアル >データを「リスト」に追加できないのはなぜですか
リストにデータを追加します extends Number>
List に要素を追加しようとするときに直面するジレンマ Number> を拡張します。これはワイルドカード宣言の制約に起因します。このような宣言では、変数は型ファミリーの任意の値を保持できます。これは、次の代入が有効であることを意味します:
List<? extends Number> foo3 = new ArrayList<Number>(); List<? extends Number> foo3 = new ArrayList<Integer>(); List<? extends Number> foo3 = new ArrayList<Double>();
ただし、リストの特定のタイプが不明であるため、このワイルドカード宣言はリストに要素を直接追加することを禁止します。たとえば、整数を foo3 に追加することは、ArrayList
対照的に、ワイルドカード宣言 List
実際的な意味を説明するために、次の Collections.copy() 呼び出しは、ワイルドカードを使用して、関連するリスト間でデータを柔軟にコピーできる方法を示しています。 type:
Collections.copy(new ArrayList<Number>(), new ArrayList<Number>()); Collections.copy(new ArrayList<Number>(), new ArrayList<Integer>()); Collections.copy(new ArrayList<Object>(), new ArrayList<Number>()); Collections.copy(new ArrayList<Object>(), new ArrayList<Double>());
結論として、List<にデータを追加します? Number> を拡張します。 List から読み取る場合、基になるリストの型が不確実であるため、これは不可能です。スーパーナンバー>型 Number とそのサブクラスに制限されます。ワイルドカードを使用すると、Collections.copy() に代表されるように、関連する型のリスト間でデータをコピーする際の汎用性が得られます。
以上がデータを「リスト」に追加できないのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。