如何将对象从超类到Java的子类获取



Person具有几个子类别,包括Employee

有一种方法应该返回另一个List,该方法仅由Person的原始列表中的Employee对象组成。

我如何在Java中完成此操作?

简单的示例:

public class Test {
public static void main(String[] args) {
    List<Person> lst = new ArrayList<Person>() {
        {
            add(new Person());
            add(new Person());
            add(new Employee());
            add(new Employee());
            add(new AnotherPerson());
            add(new AnotherPerson());
        }
    };
    List<Person> employes = lst.stream().filter(item -> item instanceof Employee).collect(Collectors.toList());
    System.out.println(employes.size());
}
class Person {
}
class Employee extends Person {
}
class AnotherPerson extends Person {
}
}

因为

人有几个子类

返回另一个仅由员工对象组成的列表

您应使用instanceOf来完成查找List<Person>Employee类。仅用于例如:

List<Person> personList // assigned to something
List<Employee> employeeList = new ArrayList<>();
for(Person person : personList)  {
    if(person !=null && person instanceOf Employee) { 
        employeeList.add((Employee) person);
    }
}

Java-Nutsandbolts的样本可能会帮助您。

使用操作员时,请记住null不是 任何事物的实例。

其他答案和评论应该提供解决方案,但是如果您想要通用的解决方案,那么您可以做这样的事情:

public static <T extends Person> List<T> getPersonTypes(Class<T> cls, Collection<Person> c)
{
  return c.stream()
      .filter(Objects::nonNull)
      .filter(p -> cls.isAssignableFrom(p.getClass()))
      .map(cls::cast)
      .collect(Collectors.toList());
}

然后称之为这样的东西:

List<Employee> employees = getPersonTypes(Employee.class, listOfPersons);

最新更新