首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从接口数组列表中获取某个对象

如何从接口数组列表中获取某个对象
EN

Stack Overflow用户
提问于 2011-03-31 21:47:27
回答 3查看 302关注 0票数 1

嘿,伙计们,我被一个问题卡住了。假设我有一个动物接口。然后我有实现它的类,比如Dog,Cat,Goat。假设这些类中的每个类都有一个从接口获取的update()函数。

我有一个动物列表,其中包括所有不同种类的动物(狗,猫,山羊)。如果我得到的字符串是" Goat“,我该如何搜索该数组列表并只选择Goat update()函数,而忽略Dog和Cat...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-31 21:49:27

代码语言:javascript
运行
复制
for ( Animal a : animals ) {
    if ( a instanceof Goat ) {
       a.update();
    }
}

如果你真的只有字符串"Goat“可以继续,你可以这样做:

代码语言:javascript
运行
复制
if ( a.getClass().getName().endsWith("Goat") ) {
    //...

或者,如果字符串与类的名称无关,则可以将字符串映射到class的实例:

代码语言:javascript
运行
复制
Map<String, Class<? extends Animal>> map = new HashMap...
map.put("Goat", Goat.class);

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

在我看来,Google's Guava是最佳选择:

代码语言:javascript
运行
复制
 for ( Goat g : Iterables.filter(animals, Goat.class) ) {
    g.update();
 }
票数 6
EN

Stack Overflow用户

发布于 2011-03-31 21:52:41

代码语言:javascript
运行
复制
public void goatUpdate(List<Animal> animals) {
    for (Animal animal : animals) {
        if (animal instanceof Goat) {
            animal.update();
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-31 21:50:28

恐怕您需要仔细查看列表,询问每个对象的类型。如果你有List<Animal>,(据我所知)没有一种简单的方法可以只获取它的特定子类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5500889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档