【问题标题】:equals() method in apache poiapache poi中的equals()方法
【发布时间】:2017-11-07 10:14:21
【问题描述】:

我需要比较 Sheets,我只是注意到类中没有 equals() 方法。它扩展了 Iterable,但如果我有一个定制的 Pojo,里面有一张纸,并制作/覆盖一个 equals() 方法,它可能会失败。

这是否意味着我需要制作一个自定义的“等于”来迭代所有行/单元格?

为什么 Sheet 没有 equals()? 谢谢

(来源:https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Sheet.html

【问题讨论】:

  • 只是在这里猜测:可能这种比较非常昂贵,人们不想默认。
  • 只是添加+信息,Sheet、Row 或 Cell 都没有 equals()。我不敢相信 Cell.equals() 会很贵。
  • Sheet 是一个接口。通常,接口不声明标准方法(如equalshashCodetoString 等)。也许你想问为什么它的实现不覆盖Object.equals
  • @defaultlocale 你是对的。都是接口。

标签: java excel apache-poi


【解决方案1】:

你必须自己实现它。

我的猜测是没有实现 equlas 方法,因为:

  • 它可能很昂贵(正如@GhostCat 建议的那样)并且
  • 目前还不是 100% 清楚应该如何实施:
    • 有人只想比较表格的名称(用于地图查找等),有人想比较所有单元格。
    • 在比较单元格时,有人想区分普通值和公式派生值,而有人并不关心。
    • 有人认为空单元格和未定义单元格是相等的,而其他人则不然。
    • 等等等等

【讨论】:

    【解决方案2】:

    您可以使用simple-excel 来执行此操作(请查找GIT 项目)。请在他们的blog 中找到一个示例:

    Workbook actual = new HSSFWorkbook(...);
    Workbook expected = new HSSFWorkbook(...);
    assertThat(actual, sameWorkbook(expected));
    

    使用它,如果两张纸不相等,您将获得有用的信息:

    java.lang.AssertionError:
    Expected: entire workbook to be equal
         but: cell at "C14" contained <"bananas"> expected <nothing>,
              cell at "C15" contained <"£1,850,000"> expected <"£1,850,000.00">,
              cell at "D16" contained <nothing> expected <"Tue Sep 04 06:30:00">
    

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 1970-01-01
      • 2021-10-02
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多