请查看Joshua Bloch的Effective Java link。
在第二段中,作者说:
该类是私有的或包私有的,并且您确定永远不会调用其equals方法。可以说,
equals
方法应在这些情况下被覆盖,以防它被意外调用:@Override public boolean equals(Object o) { throw new AssertionError(); // Method is never called }
请解释一下。我对作者使用术语私有类感到困惑,当我们确定知道它不会被调用时,为什么需要覆盖equals方法。
答案 0 :(得分:8)
只有当一个类是内部类时,它才可以是私有的。
至于“为什么”需要覆盖equals
,原因是通过按照您所示的方式编写它,您将确保该方法永远不会被故意调用。在未来六个月的时候,当项目中的新开发人员在该类上调用equals时,方法将抛出并发出信号表示调用它是不正确的。这是好事;它可以防止“遗忘”它。