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