java - 我可以让process每个bean成员的代码更漂亮吗?

标签 java

我有一个类:Data,一个类:Alarm。 我必须统计数据然后使用npoi输出excel。Alarm可能为空。 现在是我的代码:

 while (it.hasNext()){       
             Data t =  it.next(); 
             row = sheet.createRow(index++);
             Alarm a=alarms.get(t.getDeviceid().trim());
              cell = row.createCell(0);
             if(a==null||inRange(t.getNoise(),a.getNoiselow(),a.getNoiseup()))
                     cell.setCellStyle(styleNormal);
             else
                 cell.setCellStyle(styleError);
             cell.setCellValue((double)t.getNoise());
             cell = row.createCell(1);
             if(a==null||inRange(t.getPm(),a.getPmlow(),a.getPmup()))
                     cell.setCellStyle(styleNormal);
             else
                 cell.setCellStyle(styleError);
             cell.setCellValue((double)t.getPm());
             cell = row.createCell(2);
             if(a==null||inRange(t.getPressure(),a.getPressurelow(),a.getPressureup()))
                     cell.setCellStyle(styleNormal);
             else
                 cell.setCellStyle(styleError);
             cell.setCellValue((double)t.getPressure());
        ....

我重复每个 bean 属性......我可以改进这样的代码吗?

最佳答案

最简单的开始方法:查找重复代码并将其放入方法中。

  cell = row.createCell(0);
  if(a==null||inRange(t.getNoise(),a.getNoiselow(),a.getNoiseup()))
      cell.setCellStyle(styleNormal);
  else
      cell.setCellStyle(styleError);
  cell.setCellValue((double)t.getNoise());

您可以将以上代码放入方法中,并在 while 循环中调用:

 private void setCell(Row row, Data data, int cellIndex)
 {
      cell = row.createCell(cellIndex);
      Alarm a=alarms.get(data.getDeviceid().trim());
      if(a==null||inRange(data, a, cellIndex))
          cell.setCellStyle(styleNormal);
      else
          cell.setCellStyle(styleError);

      // You can also do as below if you can read it easily!!
      // cell.setCellStyle(a==null||inRange(data, a, cellIndex)?styleNormal:styleError);

      // This switch-case should also be moved to separate method.
      // Leaving that to you. 
      switch(cellIndex)
      {
          case 0:  cell.setCellValue((double)data.getNoise()); break;
          case 1:  cell.setCellValue((double)t.getPm()); break;
          ...
          ...
          default: /*set default value and break or throw InvalidCellIndex exception*/
      }
 }

 private boolean inRange(Date data, Alarm a, int cellIndex)
 {
      switch(cellIndex)
      {
          case 0:  return inRange(data.getNoise(),a.getNoiselow(),a.getNoiseup();
          case 1:  return inRange(data.getPm(),a.getPmlow(),a.getPmup();
          ...
          ...
          default: /* throw InvalidCellIndex exception*/
      }
 }

关于java - 我可以让process每个bean成员的代码更漂亮吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41278607/

相关文章:

java - 如何获取与项目选择对应的不同工作空间

java : Does wait() release lock from synchronized block

java - JPA Hibernate Spring MySql Tomcat - 连接到 2 个数据库

java - Struts2 Action通过AJAX执行和响应

java - 未编译的jar可以工作但编译后不起作用

Java:为什么在现实世界中我们应该使用 BigDecimal 而不是 Double?

java - 解压缩到 ByteArrayOutputStream - 为什么我会收到 EOFException?

java - 查找数组方法的众数 (java)

java - 从 Hibernate 反序列化 JSON

java - Java 中的统一交叉