Java 如何从接口arraylist获取特定对象

Java 如何从接口arraylist获取特定对象,java,Java,嘿,伙计们,我遇到了一个问题。 假设我有一个介面动物。然后我有实现它的类,比如Dog、Cat、Goat。假设每个类都有一个从接口获取的update()函数 我有一个动物列表,包括所有不同种类的动物(狗、猫、山羊)。如果给我一个表示“Goat”的字符串,我如何搜索arraylist并只选择Goat update()函数,而忽略Dog和Cat for ( Animal a : animals ) { if ( a instanceof Goat ) { a.update();

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

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

for ( Animal a : animals ) {
    if ( a instanceof Goat ) {
       a.update();
    }
}
如果你真的只有“山羊”这个字串,你可以这样做:

if ( a.getClass().getName().endsWith("Goat") ) {
    //...
或者,如果字符串与类的名称无关,则可以将字符串映射到类的实例:

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

//...
if ( map.get("Goat").isInstance(a) ) {
   a.update();
}
如果你真的只有“山羊”这个字串,你可以这样做:

if ( a.getClass().getName().endsWith("Goat") ) {
    //...
或者,如果字符串与类的名称无关,则可以将字符串映射到类的实例:

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

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

恐怕您需要仔细查看一下清单,询问每个对象的类型。如果你有
列表
,就我所知,没有简单的单行方法可以只获得它的指定子类。

恐怕你需要查看列表,询问每个对象的类型。如果您有
List
,就我所知,没有简单的单行方法可以只获取它的指定子类。

public void goatapdate(List animals){
public void goatUpdate(List<Animal> animals) {
    for (Animal animal : animals) {
        if (animal instanceof Goat) {
            animal.update();
        }
    }
}
用于(动物:动物){ if(山羊的动物实例){ animal.update(); } } }
public void goatUpdate(列出动物){
用于(动物:动物){
if(山羊的动物实例){
animal.update();
}
}
}

是的,我只有字符串可供选择,因此第二个选项执行trick@Jonathan:您可能需要注意这一点,例如,如果您传入了
“Dog”
,这也会更新所有
PrairieDog
。更好的方法是使用
A.getClass().getSimpleName().equals(“Goat”)
但是,在这两种情况下,您都不会匹配Goat的子类,只匹配完全是
Goat
的对象。第三个选项更稳定。是的,我只有字符串可供选择,所以第二个选项做了选择trick@Jonathan:您可能需要注意这一点,例如,如果您传入了
“Dog”
,这也会更新所有
PrairieDog
。更好的方法是使用
A.getClass().getSimpleName().equals(“Goat”)
但是,在这两种情况下,您都不会匹配Goat的子类,只匹配完全是
Goat
的对象。第三种选择更稳定。