大家好,我陷入了一个问题。
说我有一个动物界面。然后,我有实现它的类,例如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();
}