如何修改PrintDrillsNeedingBitReplacement方法过滤需换钻头的Drill?
问题修复:仅打印需要更换钻头的Drill对象
原方法核心问题
- 使用
==比较字符串,存在空指针风险且不符合Java字符串比较规范 - 错误调用
createDrill(fields):全局fields在文件读取完成后已被清空/覆盖,且equipmentList中已经存在创建好的Drill对象,无需重新实例化 - 对
needsNewBit的判断仅执行但未用于控制打印逻辑,导致所有Drill都被输出 - 返回
null不符合方法语义,应返回符合条件的设备列表
修改后的完整方法
public List<Drill> printDrillsNeedingBitReplacement() { List<Drill> drillsNeedingReplacement = new ArrayList<>(); for (Equipment equipment : equipmentList) { // 安全判断当前设备是否为Drill if (DRILL.equals(equipment.getEquipmentName())) { // 将Equipment强制转换为Drill类型(已确认类型,转换安全) Drill drill = (Drill) equipment; // 判断是否需要更换钻头 if (drill.getNeedsNewBit()) { System.out.println(drill); drillsNeedingReplacement.add(drill); } } } return drillsNeedingReplacement; }
详细修改说明
- 字符串比较优化:将
equipment.getEquipmentName() == DRILL替换为DRILL.equals(equipment.getEquipmentName()),避免equipment.getEquipmentName()为null时抛出空指针异常,同时符合Java字符串比较的标准方式 - 移除无效的
createDrill调用:直接从equipmentList中取出已创建的Drill对象并强制转换,无需重新读取fields实例化新对象 - 添加打印控制逻辑:仅当
drill.getNeedsNewBit()为true时,才执行打印操作 - 返回符合条件的列表:创建
drillsNeedingReplacement列表收集所有需要更换钻头的Drill,最后返回该列表,让方法不仅能打印结果,还能返回数据供后续使用 - 类型修正:将方法返回值从
List<Equipment>改为List<Drill>,更精准反映返回数据的类型
额外建议
如果你的Equipment类是抽象类或接口,建议添加instanceof判断来更安全地识别Drill类型,替换原有的名称判断:
if (equipment instanceof Drill) { Drill drill = (Drill) equipment; if (drill.getNeedsNewBit()) { // 打印逻辑 } }
这种方式比字符串比较更可靠,避免因设备名称拼写错误导致的判断失误。
内容的提问来源于stack exchange,提问作者Jonathan S.
相关产品推荐
相关产品推荐

