Java实现按姓名查找员工 未匹配时抛自定义异常的正确写法
员工搜索方法逻辑修正
需求梳理
- 基于存储员工数据的
ArrayList<Employee>集合employee做查询,集合内的Employee实体包含name(姓名)、employeeID(工号)、location(办公地点)、DOJ(入职日期)字段 - 实现
findEmployee方法:入参为员工姓名,返回匹配到的员工全部关联信息 - 全列表遍历无匹配结果时,抛出对应查询失败异常
原有代码问题
你当前的代码存在3个核心问题:
- 异常抛出逻辑位置错误:在循环遍历的不匹配分支直接抛异常,只要第一个遍历到的员工姓名和入参不一致,就会直接终止流程抛异常,完全不会执行后续元素的匹配
- 语法漏洞:如果
employee集合为空,循环体不会执行,方法既没有返回值也没有抛出异常,会直接触发编译错误 - 规范问题:自定义异常类名
emplyeeNotFoundException存在拼写错误(正确拼写为EmployeeNotFoundException,需符合Java类名大驼峰规范);入参名Name首字母大写不符合Java小驼峰参数命名规则;未做空值判断,存在空指针异常风险。
正确实现代码
// 员工集合保持原有定义,注意后续自定义异常类需修正拼写 private static List<Employee> employee = new ArrayList<>(); public Employee findEmployee(String name) throws EmployeeNotFoundException { // 遍历全量员工数据 for (Employee emp : employee) { // 增加空判断避免NPE,匹配到目标员工直接返回,终止循环 if (emp != null && name.equals(emp.getName())) { return emp; } } // 全列表遍历完成仍未找到匹配项,此时才抛出异常 throw new EmployeeNotFoundException(name); }
逻辑说明
- 循环遍历过程中一旦匹配到姓名一致的员工,会直接通过
return终止循环和方法执行,返回该员工的完整实体信息 - 异常抛出逻辑移到循环外部,只有所有元素都校验完成、没有找到匹配员工时才会触发
- 新增的空值判断可以避免集合中存在null元素、员工姓名字段为null时触发空指针异常
内容的提问来源于stack exchange,提问作者TWICE
相关产品推荐
相关产品推荐

