约书亚布洛赫的有效Java中的等价方法

use*_*690 7 java equals effective-java

请查看Joshua Bloch的Effective Java 链接.

在第二段中,作者说:

该类是私有的或包私有的,并且您确定它的equals方法永远不会被调用.可以说,在这些情况下应该覆盖该equals方法,以防它被意外调用:

@Override public boolean equals(Object o) {
     throw new AssertionError(); // Method is never called
}
Run Code Online (Sandbox Code Playgroud)

请解释一下.我对作者使用术语私有类感到困惑,并且当我们确定不会被调用时,为什么需要重写equals方法.

And*_*gia 8

只有当类是内部类时,它才可以是私有的.

至于"为什么"需要覆盖equals,原因是通过按照你所示的方式编写它,你将确保永远不会故意调用该方法.在未来六个月的时刻,当项目中的新开发人员将在该类上调用equals时,该方法抛出并发出信号表示调用它是不正确的.这是好事; 它可以防止"遗忘"它.