5

次の状況を考慮してください。

public abstract class Vegetable {};

public class Tomato extends Vegetable {};
public class Cucumber extends Vegetable {};

public class Orange {};

HashSetポイントは、拡張するものだけを保存したいのですがVegetable、どうすればよいですか? これは単純なはずです..

Set <? extends Vegetable> () hs = new HashSet <? extends Vegetable> ();..もちろん、動作する構造ではありません.Javaは、Set私が欲しいのタイプを指定するTomatoことを望んでいCucumberます.

キャストは使わない方がいいと思います...

4

1 に答える 1

8

作成するとき

Set<SomeType> = new HashSet<SomeType>();

セットは、 の任意のサブクラスに属するオブジェクトを格納できますSomeType。あなたの場合、必要なのは

Set<Vegetable> set = new HashSet<Vegetable>();

あなたは今これを行うことができます:

set.add(new Tomato());
set.add(new Cucumber());

これを行うと、コンパイル エラーが発生します。

set.add(new Orange()); // Does not compile

キャストに関する限り、オブジェクトを にキャストする必要はありませんset。ただし、取得時に特定のタイプ (つまり、単に ではないVegetable) が必要な場合は、キャストが必要になります。

于 2013-06-09T10:09:50.307 に答える