Java getArray方法仅返回HR员工,如何修改以返回所有转换后的员工对象
问题原因
- 原方法返回值定义为单个
Employee类型,本身就不支持返回多个员工对象 - 循环内部仅使用单个
emp变量存储转换结果,每次新的转换都会覆盖上一次的结果,循环结束后仅保留最后一次成功转换的对象 - 大量重复的
if-else分支逻辑完全一致,存在冗余代码
修改方案
- 把方法返回值改为
List<Employee>,用于存储所有转换完成的员工对象 - 在循环开始前初始化一个空的结果列表,每次完成单个员工的转换后,就将实例添加到结果列表中
- 合并冗余的分支逻辑,简化代码
修改后代码
import java.util.ArrayList; import java.util.List; public static List<Employee> getArray() { List<Employee> employees = DataAccess.readFile("employees.txt"); // 初始化结果列表存储所有转换后的对象 List<Employee> convertedEmployees = new ArrayList<>(); for (Employee originEmp : employees) { String title = originEmp.getTitleOfEmployment(); Employee convertedEmp = null; if (title.contains("Management")) { convertedEmp = new Management( originEmp.getEmployeeId(), originEmp.getFirst_name(), originEmp.getLast_name(), originEmp.getDOB(), originEmp.getGender(), originEmp.getAddress(), title, originEmp.getDateHired(), originEmp.getHoursWorked(), originEmp.getRateOfPay(), originEmp.getCarAllowance(), originEmp.getMonthlyPay(), originEmp.getTaxRate() ); } else if ("HR".equals(title) || "Sales".equals(title) || "Drivers".equals(title) || "Tour Operator".equals(title) || "Accounting Officer".equals(title)) { convertedEmp = new SupportStaff( originEmp.getEmployeeId(), originEmp.getFirst_name(), originEmp.getLast_name(), originEmp.getDOB(), originEmp.getGender(), originEmp.getAddress(), title, originEmp.getDateHired(), originEmp.getHoursWorked(), originEmp.getRateOfPay(), originEmp.getCarAllowance(), originEmp.getMonthlyPay(), originEmp.getTaxRate() ); } else { System.out.println("not recognised"); } // 转换成功的对象加入结果列表 if (convertedEmp != null) { convertedEmployees.add(convertedEmp); } } return convertedEmployees; }
补充说明
修改后的方法会返回所有成功转换的员工实例,未识别的职位会跳过不会加入结果列表,全量兼容原有业务逻辑,不需要调整其他调用方的核心处理逻辑,仅需要把接收返回值的变量类型从单个Employee改为List<Employee>即可。
内容的提问来源于stack exchange,提问作者ditiro
相关产品推荐
相关产品推荐

