Groovy ExcelBuilder - 帮助理解示例

时间:2014-10-20 10:21:02

标签: groovy apache-poi

我正在尝试了解此代码example的工作原理。遗憾的是,根本没有评论。

HSSFRow.metaClass.getAt = { int idx ->
   def cell = delegate.getCell(idx)
   if(!cell) {
      return null
   }
   def value
   switch(cell.cellType) {
      case HSSFCell.CELL_TYPE_NUMERIC:
         if(HSSFDateUtil.isCellDateFormatted(cell)) {
            value = cell.dateCellValue
         } else {
            value = cell.numericCellValue
         }
         break
       case HSSFCell.CELL_TYPE_BOOLEAN:
          value = cell.booleanCellValue
          break
       default:
          value = cell.stringCellValue
          break
       }
       return value
    }
}

有人可以解释一下

  1. 为什么需要覆盖MetaClass.getAt()方法?它没有直接使用。它是如何工作的?

  2. cellType,dateCellValue,numericCellValue等(方法或变量)是什么?他们在哪里定义?

1 个答案:

答案 0 :(得分:2)

  1. 您不需要覆盖getAt方法,但它会被覆盖以使编码更容易。当覆盖getAt时,它会在您引用对象时使用[]语法,如此代码行return row[idx](摘自示例)。它是运算符重载,请参阅here。总结它不是直接通过getAt使用,而是使用[]语法。

  2. 在对象getXXX()上提供x方法(无参数)时的groovy中你可以省略get来引用它所以:x.getXXX()是相同的为x.XXXcell只是在HSSFRow对象上调用getCell(),其他方法在HSSFCell对象上调用,并且应用完全相同的规则。