在下面的代码中,我创建了父类和子类对象。这些对象存储在arraylist中。我的问题是如何区分这些对象,我只想检索二级员工的详细信息。
package com.javahonk.controller;
import java.util.ArrayList;
import java.util.ListIterator;
class FirstLevelEmployee {
int id;
String name;
double salary;
FirstLevelEmployee(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
}
class SecondLevelEmployee extends FirstLevelEmployee {
int experience;
SecondLevelEmployee(int id, String name, double salary, int experience) {
super(id, name, salary);
this.experience = experience;
}
}
public class EmployeeDemo {
public static void main(String[] args) {
ArrayList<FirstLevelEmployee> emps = new ArrayList<>();
emps.add(new FirstLevelEmployee(1, "aaa", 20000.00));
emps.add(new FirstLevelEmployee(2, "bbb", 10000.00));
emps.add(new FirstLevelEmployee(3, "bbb", 30000.00));
emps.add(new SecondLevelEmployee(4, "zzz", 12000, 2));
emps.add(new SecondLevelEmployee(6, "yyy", 45000.00, 5));
}
}
答案 0 :(得分:1)
尝试这样做:
for(FirstLevelEmployee emp : emps){
if(emp instanceof SecondLevelEmployee){
System.out.println(((SecondLevelEmployee)emp).experience);
}
}
您将迭代数组,并询问给定元素emp
是否为SecondLevelEmployee
的实例。如果是真的,您可以通过将emp
转换为SecondLevelEmployee
答案 1 :(得分:1)
这种设计不够理想。
更好的解决方案是拥有具有体验属性的Employee类。您可以通过这种方式过滤集合。
员工可以在积累足够的经验后随着时间的推移而转换,而无需更改类型或代码。
我建议重新考虑这个设计。
答案 2 :(得分:0)
如果你了解Java 8,就有这个选项:
public static void main(String[] args) {
ArrayList<FirstLevelEmployee> emps=new ArrayList<>();
emps.add(new FirstLevelEmployee(1, "aaa", 20000.00));
emps.add(new FirstLevelEmployee(2, "bbb", 10000.00));
emps.add(new FirstLevelEmployee(3, "bbb", 30000.00));
emps.add(new SecondLevelEmployee(4, "zzz", 12000, 2));
emps.add(new SecondLevelEmployee(6, "yyy", 45000.00, 5));
emps.removeIf(e -> e instanceof SecondLevelEmployee);
System.out.println(emps);
}