一個類Person
有幾個小類,包括Employee
。如何在java中將對象從超類獲取到子類?
有一種方法應該返回另一個List
,它只包含Person
原始列表中的Employee
對象。
如何在Java中完成此操作?
一個類Person
有幾個小類,包括Employee
。如何在java中將對象從超類獲取到子類?
有一種方法應該返回另一個List
,它只包含Person
原始列表中的Employee
對象。
如何在Java中完成此操作?
由於
人有幾個子類
和
返回另一個列表其中只包含了員工的對象
您應使用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的樣本可能會幫助你。
當使用instanceof運算符,請記住,
null
不是任何一個 實例。
是否還有其他方法可以做到這一點? –
@ IT-KOKO instanceOf當你有多個Person子類時,它是最安全的方式。 – nullpointer
爲您簡單的例子:
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 {
}
}
其他的答案和評論應該提供一個解決方案,但如果你想有一個通用的解決方案,那麼你可以做這樣的事情:
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);
看看[問] – pvg
歡迎來到堆棧溢出。不幸的是你的問題質量很低。做一些研究,並告訴我們你到現在爲止做了什麼。請在閱讀之前閱讀https://stackoverflow.com/help/how-to-ask。 –
請發佈您的「人員」和「員工」類,以更好地瞭解您的問題。 –