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

我有一个Animal数组列表,其中包括所有不同种类的动物类(狗,猫,山羊)。如果给我一个说“山羊”的字符串,我将如何搜索该数组列表并仅选择Goat update()函数,而忽略Dog and 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's Guava是最佳选择:

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

09-25 22:07