繁体   English   中英

如何从接口数组列表中获取某个对象

[英]How to get a certain object from an interface arraylist

大家好,我陷入了一个问题。 说我有一个界面Animal。 然后,我有实现它的类,例如Dog,Cat,Goat。 说这些类每个都有一个从接口获取的update()函数。

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

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

如果您确实只有String“ 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的番石榴是最好的选择:

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

恐怕您将需要遍历列表以询问每个对象的类型。 如果您有List<Animal> ,据我所知,没有一种简单的单行方式仅获取指定的子类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM