2013-07-22 16 views
6

スーパーリストからサブクラスを取得:のJava:私は、Javaとの新たなんだと2次のコードについて質問してい

class Animal { } 
class Dog extends Animal { } 
class Cat extends Animal { } 
class Rat extends Animal { } 

class Main { 
    List<Animal> animals = new ArrayList<Animal>(); 

    public void main(String[] args) { 
    animals.add(new Dog()); 
    animals.add(new Rat()); 
    animals.add(new Dog()); 
    animals.add(new Cat()); 
    animals.add(new Rat()); 
    animals.add(new Cat()); 

    List<Animal> cats = getCertainAnimals(/*some parameter specifying that i want only the cat instances*/); 
    } 
} 

1)はいずれかから犬や猫のインスタンスを取得する方法はありますアミーナルリスト? 2)はいの場合、getCertainAnimalsメソッドを正しくビルドするにはどうすればよいですか?

+1

instanceof演算子を使用します。http://www.javapractices.com/topic/TopicAction.do?Id=31 – kosa

+1

クラスの型を取得するためにinstanceOf()を使用してください: – Satya

答えて

4
Animal a = animals.get(i); 

if (a instanceof Cat) 
{ 
    Cat c = (Cat) a; 
} 
else if (a instanceof Dog) 
{ 
    Dog d = (Dog) a; 
} 

NB:あなたはinstanceofを使用しない場合、それがコンパイルされますが、それはまた、あなたがaRat場合でも、CatまたはDogaをキャストすることができます。コンパイルしているにもかかわらず、実行時にClassCastExceptionが表示されます。したがって、instanceofを必ず使用してください。あなたは、次の

List<Animal> animalList = new ArrayList<Animal>(); 
    animalList.add(new Dog()); 
    animalList.add(new Cat()); 
    for(Animal animal : animalList) { 
     if(animal instanceof Dog) { 
      System.out.println("Animal is a Dog"); 
     } 
     else if(animal instanceof Cat) {; 
      System.out.println("Animal is a Cat"); 
     } 
     else { 
      System.out.println("Not a known animal." + animal.getClass() + " must extend class Animal"); 
     } 
    } 

ような何かを行うことができます

+1

ありがとう、それは私を助けました! – user2605421

+1

問題ありません。ようこそ。あなたは[ツアー](http://stackoverflow.com/about)を取る必要があります。 –

2

また、動物のクラスを確認し、動物のサブクラスとそれを比較することができます。あなたは基本的に

Animal is a Dog 
Animal is a Cat 

として出力を取得しますどちらの場合も、

for(Animal animal : animalList) { 
    if(animal.getClass().equals(Dog.class)) { 
     System.out.println("Animal is a Dog"); 
    } 
    else if(animal.getClass().equals(Cat.class)) {; 
     System.out.println("Animal is a Cat"); 
    } 
    else { 
     System.out.println("Not a known animal." + animal.getClass() + " must extend class Animal"); 
    } 
} 

のように両方が同じことを行います。ちょうどあなたにより良い理解を与えるために。

関連する問題