5

重複の可能性:のサブクラス
ですか? Java のジェネリックが暗黙のうちにポリモーフィックではないのはなぜですか?List<Dog>List<Animal>

動物を拡張するクラスDogsのリストがあり、次のタイプのリストがあります。

ArrayList<Animals> animal = new ArrayList<Animals>();

これで、Dogs を拡張する別のクラスPuppyが作成されました。

そして持っているList<Puppy> puppy = new ArrayList<Puppy>();

今私はリストanimalをにキャストしたいpuppy。直接することは可能ですか?

私は以下のようにそれを行うことができます。

for (Animals ani: animal){
     puppy.add((Puppy) ani)
}

しかし、ダイレクト キャスティング ソリューションが必要です。出来ますか?

4

2 に答える 2

16

いいえ、最初のリストを次のように定義しない限り、直接は機能しません。

List<? extends Animals> animal;

次に、次のことができるようになります。

List<Puppy> puppy = new ArrayList<Puppy>();
animal = puppy;
于 2012-05-11T08:57:42.480 に答える
1

まず、基本クラスでリストを次のように定義する必要があります...

public ArrayList<? super Animal> ani;

次に、基本クラスリストを extends クラスにキャストします ...

ArrayList<? extends Animal> puppy= new ArrayList<Puppy>();
puppy= (ArrayList<? extends Animal>)ani;
List<Puppy> castPuppy = (List<Puppy>)puppy;//here we case the base class list in to derived class list.

注:未チェックの例外を介している可能性があります

于 2012-05-14T10:01:56.047 に答える