Java从父类中检索子类对象

时间:2018-04-12 07:20:47

标签: java

是否可以编写一个方法,允许我接收属于父类Person的对象列表。

Person类下,有几个子类,包括Employee类。

我希望该方法返回一个单独的List,该List仅包含原始列表中的Employee个对象。

谢谢

2 个答案:

答案 0 :(得分:7)

您需要按步骤执行此操作:

  1. 迭代List<Person检查所有内容
  2. 如果当前元素为en Employee,则需要将其强制转换为
  3. 返回keeped Employee
  4. 的列表

    1。使用foreach-loop

    的经典方式
    public static List<Employee> getEmployeeListFromPersonList(List<Person> list) {
        List<Employee> res = new ArrayList<>();
        for (Person p : list) {                 // 1.Iterate
            if (p instanceof Employee) {        // 2.Check type
                res.add((Employee) p);          // 3.Cast and keep it
            }
        }
        return res;
    }
    

    2。使用Streams

    的Java-8方式
    public static List<Employee> getEmployeeListFromPersonList(List<Person> list) {
        return list.stream()                            // 1.Iterate
                   .filter(Employee.class::isInstance)  // 2.Check type
                   .map(Employee.class::cast)           // 3.Cast
                   .collect(Collectors.toList());       // 3.Keep them
    }
    

答案 1 :(得分:3)

你的意思是:

List<Employee> getEmployees(List<Person> personList){
    List<Employee> result = new ArrayList<Employee>();

    for(Person person : personList){
        if(person instanceof Employee) result.add((Employee)person);
    }

    return result;
}