2014-10-20 33 views
1

我'試圖理解這個代碼example如何工作的。不幸的是根本沒有評論。Groovy的ExcelBuilder - 幫助理解的例子

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. 什麼是單元格類型,dateCellValue,numericCellValue等(方法或變量)?他們在哪裏定義?

回答

2
  1. 你並不需要重寫getAt方法,但它重寫,以使編碼更容易。當getAt被覆蓋它使得能夠使用[]語法當你指的對象作爲在這行代碼return row[idx](從例如拍攝)。這是運營商超載,請參閱here。總結它不是通過getAt[]語法直接使用。

  2. 在常規當提供(無參數)getXXX()方法上對象x可以只參考它省略get這樣:x.getXXX()相同x.XXXcellgetCell()只是調用上HSSFRow對象,其他的方法調用上HSSFCell對象和完全相同的規則適用。