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