ホームページ >Java >&#&チュートリアル >Java汎用コンテナコレクションの使い方
簡単な例から始めましょう:
<code>public void testGenerics() {<br> Collection<Number> numbers = new ArrayList<>();<br> numbers.add(1); // ok<br> numbers.add(0.1); // ok<br><br> Collection<? extends Number> numbers2 = new ArrayList<>();<br> // don't work, you don't know which subtype 'numbers2' exactly contains<br> numbers2.add(1); // oops!<br>}<br></code>
この例は、実際には少し反人間的なものです。この変換に対するほとんどの人 (私を含む) の最初の反応は、「もちろんです」であるはずです。そうです」 (これは私が罠に陥ったということです) について、私の理解を述べさせていただきます:
Collection
Collection extends Number>: この Collection が「サブタイプ」の Collection インスタンスであることを示します" Number 型の Collection< Integer>/Collection
Collection
別の例:
<code>public void testGenerics() {<br> Collection<Number> numbers = new ArrayList<>();<br> Collection<Integer> integers = new ArrayList<>();<br> Collection<? extends Number> numbers2 = new ArrayList<>();<br> <br> numbers2 = integers; // ok<br> numbers2 = numbers; // ok<br> <br> // don't work, Collection<Number> != Collection<Integer><br> numbers = integers; // oops!<br>}<br></code>
Integer は明らかに Number を継承しますが、なぜ
Collection
は確立されていません。例を見てみましょう:
<code>public void testGenerics() {<br> Collection<Integer> profits = new ArrayList<>();<br> <br> insertSomething(profits); // line 1<br> <br> Integer profit = profits.iterator().next(); // oops! crash<br>}<br><br>private void insertSomething(Collection<Number> numbers) {<br> numbers.add(Long.MAX_VALUE);<br>}<br></code>
1 行目が確立されている場合、次の利益は負の数になり、その後の一連の利益は負の数になります。コードが十分に堅牢でない場合、予期しない RuntimeException がスローされ、メソッドが異常終了したり、プログラムがクラッシュしたりする可能性もあります。
つまり、一言で言えば、 Collection
さて、Collection
<code>public void testGenerics2() {<br> Collection<Integer> integers = new ArrayList<>();<br><br> Collection<?> objects2 = integers; // ok<br> // don't work, which type of 'objects2' contains is uncertain<br> objects2.add(1); // oops!<br> <br> Collection<Object> objects = integers; // oops!<br>}<br></code>
<code>public void testGenerics() {<br> Collection<Integer> integers = new ArrayList<>();<br><br> Collection<Object> objects = integers; // oops!<br> // don't work, which type of 'objects2' contains is uncertain<br> objects.add("1");<br><br> Integer one = objects.iterator().next(); // oops! crash<br>}<br></code>Collection
Collection< ;?>Cannot put data into the container because? (UnknownType) is anknown type and the result of obj instanceof UnknownType can be判定できません;
?これは未知の型を表し、オブジェクトは既知の型を表します。
Collection
以上がJava汎用コンテナコレクションの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。