java - 从 ArrayList 返回多种对象类型

标签 java

基本上,我有一个类“A”,其他类(例如“B”、“C”和“D”)扩展了它。这些类型的对象将具有不一定是唯一的字符串名称。

public class A {
    //some code
}


public class B extends A {
    // some code
}

因此类 C 和 D 也扩展了 A,与 B 相同。

接下来我有一个持有者类,它有一个数组列表来保存 B、C 和 D 对象(这里不会包含 A 对象)。

public class Holder {
    List<A> container;

    public Holder() {
        container = new ArrayList<A>();
    }

    public A getItemByName(String s) {
        //return the first object with s == name, or return null
    }

    public A getItemByType(Class c) {
        //return  the first object that matches the class or return null
    }
}

这些函数可以成功挑选出所需的对象,但我需要以 B、C 和 D 类型返回对象。有没有办法做到这一点,如果有的话,怎么做?

最佳答案

你可以做到

public <T extends A> T getItemByType(Class<T> c) {
   for(Object o : container){
      if(c.isInstance(o)){
         return c.cast(o);        
      }
   }
   return null;
}

然后你就可以做到

B found = holder.getItemByType(B.class);

关于java - 从 ArrayList 返回多种对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27829737/

相关文章:

针对某些扩展的 Java 路径过滤

java - JScrollPane、JTextArea 和 JPanel 的问题

java - ByteBuffer Little Endian 插入不起作用

java - 线程 "main"org.openqa.selenium.WebDriverException : unknown error: Chrome failed to start: exited normally 中出现异常

java 7错误: Unable to load native library: ld. so.1 : java: fatal: libscf. so.1:打开失败:没有这样的文件或目录

Java URL 类 openStream 抛出 java.net.ConnectException : Connection refused: connect

java - 为 oxm jaxb2 spring 服务获取 406。编码请求体有效,返回响应体无效

java - 如果我使用 -D 设置系统属性,我可以从我的代码中访问它吗?

java - 生成方法中无法识别变量

Java,需要帮助从数组中打印字符串