如何从界面arraylist中获取某个对象

时间:2011-03-31 13:47:27

标签: java

嘿伙计们我遇到了问题。 说我有一个界面动物。然后我有实现它的类,如Dog,Cat,Goat。假设每个类都有一个从接口获得的update()函数。

我有动物的arraylist,包括所有不同种类的动物类(狗,猫,山羊)。如果给我一个字母“Goat”,我将如何搜索该arraylist并仅选择Goat update()函数,忽略Dog和Cat ......

3 个答案:

答案 0 :(得分:6)

for ( Animal a : animals ) {
    if ( a instanceof Goat ) {
       a.update();
    }
}

如果你真的只有字符串“Goat”继续下去,你可以这样做:

if ( a.getClass().getName().endsWith("Goat") ) {
    //...

或者,如果String与类的名称无关,则可以将String映射到Class的实例:

Map<String, Class<? extends Animal>> map = new HashMap...
map.put("Goat", Goat.class);

//...
if ( map.get("Goat").isInstance(a) ) {
   a.update();
}

在我看来Google's Guava是最好的选择:

 for ( Goat g : Iterables.filter(animals, Goat.class) ) {
    g.update();
 }

答案 1 :(得分:1)

public void goatUpdate(List<Animal> animals) {
    for (Animal animal : animals) {
        if (animal instanceof Goat) {
            animal.update();
        }
    }
}

答案 2 :(得分:0)

我担心您需要查看列表,询问每个对象的类型。如果你有List<Animal>(据我所知)没有简单的单行方式来获取itp的指定子类>