嗨,我们在一个问题上陷入困境。 说我有一个界面动物。然后我有实施它的课程,如狗,猫,山羊。说每个这些类都有一个从接口获得的update()函数。如何从界面数组列表中获取某个对象
我有一个Animal列表,包括所有不同种类的动物类(狗,猫,山羊)。如果我得到一个字符串,说“喜羊羊”如何将我搜索该ArrayList和选择只山羊update()函数,忽略了狗和猫...
嗨,我们在一个问题上陷入困境。 说我有一个界面动物。然后我有实施它的课程,如狗,猫,山羊。说每个这些类都有一个从接口获得的update()函数。如何从界面数组列表中获取某个对象
我有一个Animal列表,包括所有不同种类的动物类(狗,猫,山羊)。如果我得到一个字符串,说“喜羊羊”如何将我搜索该ArrayList和选择只山羊update()函数,忽略了狗和猫...
for (Animal a : animals) {
if (a instanceof Goat) {
a.update();
}
}
如果你真的只有字符串“喜羊羊“去,你可以做这样的事情:
if (a.getClass().getName().endsWith("Goat")) {
//...
或者如果字符串无关类的名称,你可以映射一个String类的一个实例:
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();
}
恐怕你需要去通过列表,询问每个对象的类型。如果你有List<Animal>
,那么(据我所知)并不是简单的单行方法来获取它的唯一指定的子类。
public void goatUpdate(List<Animal> animals) {
for (Animal animal : animals) {
if (animal instanceof Goat) {
animal.update();
}
}
}
非常感谢你!刚刚重新启动java并忘记了基本知识... – thunderousNinja 2011-03-31 13:50:11
是的,我只有字符串去,所以第二个选项做了诡计 – thunderousNinja 2011-03-31 14:11:16
@Jonathan:你可能想要小心,因为这也会更新所有'PrairieDog'例如,如果你通过了''狗'''''。更好的方法是使用'a.getClass()。getSimpleName()。equals(“Goat”)'然而,在这两种情况下,你都不会匹配Goat的子类,而只能匹配“Goat”的对象。第三种选择更稳定。 – 2011-03-31 14:20:37