Java代码优化案例1:IF语句优化

ゝ一纸荒年。 2023-10-15 09:47 258阅读 0赞

业务中用到了一些判断语句,最开始写在了具体业务方法里面:如下

优化前:

  1. /**
  2. * 重点设备及缺陷 数据对象解析
  3. *
  4. * @param request
  5. * @throws IOException
  6. */
  7. public static<T> List<T> getImportDataEquipmentDefect(String[] fields, Class<T> clz, HttpServletRequest request)
  8. throws IOException, InvalidFormatException, SecurityException, NoSuchMethodException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, InstantiationException {
  9. Workbook wb = getWorkbookFromRequest(request);
  10. Sheet sheet = wb.getSheetAt(4);
  11. String departmentName="";
  12. String maintenanceProject="";
  13. String dailyPlanDate =null;
  14. List<T> datas = new ArrayList<>();
  15. // 获取总行数
  16. int rows = sheet.getPhysicalNumberOfRows();
  17. if (rows >= 2) {
  18. departmentName = sheet.getRow(1).getCell(1).getStringCellValue();
  19. maintenanceProject = sheet.getRow(3).getCell(0).getStringCellValue();
  20. dailyPlanDate = getCellValue((HSSFRow)sheet.getRow(1), 10);
  21. }
  22. for (int i = 3; i <= sheet.getLastRowNum(); i++) {
  23. Row row = sheet.getRow(i);
  24. if (row == null) {
  25. continue;
  26. }
  27. if (fields != null) {
  28. T obj = clz.getDeclaredConstructor().newInstance();
  29. for (int j= 0; j< fields.length; j++) {
  30. Cell cell = row.getCell(j);
  31. String cellValue = getCellValue(cell);
  32. String fieldName = fields[j];
  33. Field field = null;
  34. try {
  35. field = obj.getClass().getDeclaredField(fieldName);
  36. } catch (NoSuchFieldException e) {
  37. field = obj.getClass().getSuperclass().getDeclaredField(fieldName);
  38. }
  39. field.setAccessible(true);
  40. if(fieldName.equals("departmentName")){
  41. cellValue = departmentName;
  42. }
  43. if(fieldName.equals("maintenanceProject")){
  44. cellValue = maintenanceProject;
  45. }
  46. if(fieldName.equals("dailyPlanDate")){
  47. cellValue = dailyPlanDate;
  48. }
  49. setFieldValue(field, obj, cellValue);
  50. }
  51. datas.add(obj);
  52. }
  53. }
  54. return datas;
  55. }

优化后:

直接调用这个setCellValue就行

  1. public void setCellValue(String fieldName) {
  2. String cellValue = "";
  3. switch(fieldName) {
  4. case "departmentName":
  5. cellValue = departmentName;
  6. break;
  7. case "maintenanceProject":
  8. cellValue = maintenanceProject;
  9. break;
  10. case "dailyPlanDate":
  11. cellValue = dailyPlanDate;
  12. break;
  13. default:
  14. break;
  15. }
  16. }

优化之前代码的不好之处在于,使用多个if语句来判断字段名,这样会使代码显得冗长,并且不易于维护,当需要添加更多字段时,需要不断添加新的if语句。而优化之后的代码使用了switch语句,可以更简洁地处理这种情况,并且易于扩展,当需要添加新的字段时,只需要在switch语句中添加对应的case即可。这样可以提高代码的可读性和可维护性。

发表评论

表情:
评论列表 (有 0 条评论,258人围观)

还没有评论,来说两句吧...

相关阅读