根据文件读取行数创建对应数量Employee对象的代码是否正确?
你的代码存在以下几个问题,无法正常达到预期效果:
- 1. 成员变量被局部变量覆盖(核心错误)
你已经在类中提前声明了成员变量private ArrayList<Employee> employeeList;,但在构造方法中又重新声明了同名的局部变量ArrayList<Employee> employeeList = new ArrayList<>();,这会导致你循环添加的所有Employee对象都仅存在于局部变量中,类的成员变量始终为null,构造方法执行完后外部根本拿不到解析后的员工列表。
修复方式:把构造方法里的局部变量声明去掉,直接给成员变量赋值即可:
employeeList = new ArrayList<>();
- 2. 原始类型使用带来的类型安全问题
你声明的行集合private ArrayList lines;没有指定泛型,属于原始类型使用,既会触发编译警告,也可能在后续读取行内容时出现类型转换异常,建议修改为指定存储字符串的泛型:
private ArrayList<String> lines;
- 3. FileReader方法调用的兼容问题
JDK自带的java.io.FileReader没有getLines()方法,如果你使用的是自己封装的自定义FileReader工具类可忽略该条,如果是用的JDK原生类,这个写法会直接编译报错。如果是用原生API实现按行读文件,建议用BufferedReader的lines()方法更稳妥。 - 4. 资源与异常处理缺失
当前代码没有处理文件读取过程中可能出现的IO异常,也没有对文件流做关闭处理,容易出现资源泄漏。建议要么在构造方法签名上声明抛出对应的异常,要么内部加try-catch做异常捕获处理,读取完文件后及时关闭流资源。 - 可选优化点
循环遍历的写法可以简化为增强for循环,更易读也能避免下标越界风险:
for (String line : file.getLines()) { employeeList.add(new Employee(line)); }
内容的提问来源于stack exchange,提问作者haris faizal
相关产品推荐
相关产品推荐

