嘿伙计们我遇到了问题。 说我有一个界面动物。然后我有实现它的类,如Dog,Cat,Goat。假设每个类都有一个从接口获得的update()函数。
我有动物的arraylist,包括所有不同种类的动物类(狗,猫,山羊)。如果给我一个字母“Goat”,我将如何搜索该arraylist并仅选择Goat update()函数,忽略Dog和Cat ......
答案 0 :(得分:6)
for ( Animal a : animals ) {
if ( a instanceof Goat ) {
a.update();
}
}
如果你真的只有字符串“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();
}
答案 1 :(得分:1)
public void goatUpdate(List<Animal> animals) {
for (Animal animal : animals) {
if (animal instanceof Goat) {
animal.update();
}
}
}
答案 2 :(得分:0)
我担心您需要查看列表,询问每个对象的类型。如果你有List<Animal>
(据我所知)没有简单的单行方式来获取itp的指定子类>