前提・実現したいこと
ListIteratorを用いてリストの操作を行っています。
クラスAnimalを継承しているクラスHuman,Cat,Dog,Birdがあります。
それぞれのインスタンスをArrayList<Animal>に追加していきます。今回は以下の順で追加します。
追加する順 | クラス |
---|---|
1 | Human |
2 | Cat |
3 | Dog |
4 | Bird |
【実現したいこと】
次の要素のクラスがBirdの時、そのクラスに特定の操作を実施する。
for文を用いた方法はわかるのですが、ListIteratorを用いた方法がわかりません。
今回でいうと、次の要素のクラスがBirdであるDogでのみ、changeFlag()を呼び出したいです。
お願いいたします。
発生している問題・エラーメッセージ
次の要素がクラスBirdであることは判別できても現在の要素(Dogのインスタンス)でのみ、changeFlag()を呼び出させる方法がわかりません。
該当のソースコード
Main
1ArrayList<Animal> list = new ArrayList<>(); 2Human human = new Human(); 3Cat cat = new Cat(); 4Dog dog = new Dog(); 5Bird bird = new Bird(); 6list.add(human); 7list.add(cat); 8list.add(dog); 9list.add(bird); 10 11// ここをIteratorにしたい 12for(int i = 0;i < list.size(); i++){ 13 // クラスがA4かチェック 14 if((i < list.size() - 1 )&&(list.get(i + 1) instanceof Bird)){ 15 list.get(i).changeFlag(); 16 } 17} 18 19// dogのみTrueになっているかチェック 20for(Animal animal : list){ 21 if(!animal.getFlag()){ 22 System.out.println("False"); 23 }else{ 24 System.out.println("True"); 25 } 26} 27
Animal
1class Animal{ 2 private boolean flag = false; 3 Animal(){} 4 5 void changeFlag(){ 6 flag = true; 7 } 8 9 boolean getFlag(){ 10 return flag; 11 } 12}
Human
1class Human extends Animal{ 2 Human(){} 3}
Cat
1class Cat extends Animal{ 2 Cat(){} 3}
Dog
1class Dog extends Animal{ 2 Dog(){} 3}
Bird
1class Bird extends Animal{ 2 Bird(){} 3}
試したこと
Main
1// ArrayList宣言から追加までは同じ 2ListIterator<Animal> iterator = list.listIterator(); 3while(iterator.hasNext()) { 4 // 次がBirdか判別 5 // 特定の処理 6}
補足情報(FW/ツールのバージョンなど)
特になし。