You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现按姓名查找员工 未匹配时抛自定义异常的正确写法

员工搜索方法逻辑修正

需求梳理

  • 基于存储员工数据的ArrayList<Employee>集合employee做查询,集合内的Employee实体包含name(姓名)、employeeID(工号)、location(办公地点)、DOJ(入职日期)字段
  • 实现findEmployee方法:入参为员工姓名,返回匹配到的员工全部关联信息
  • 全列表遍历无匹配结果时,抛出对应查询失败异常

原有代码问题

你当前的代码存在3个核心问题:

  1. 异常抛出逻辑位置错误:在循环遍历的不匹配分支直接抛异常,只要第一个遍历到的员工姓名和入参不一致,就会直接终止流程抛异常,完全不会执行后续元素的匹配
  2. 语法漏洞:如果employee集合为空,循环体不会执行,方法既没有返回值也没有抛出异常,会直接触发编译错误
  3. 规范问题:自定义异常类名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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:54:32