【发布时间】:2019-03-19 18:18:10
【问题描述】:
我刚刚浏览了openJDK8中HashMap的源代码,想了解虽然TreeMap(static final class TreeNode)类被声明为final,但类中有些方法被声明为final - 想了解的意义。
由于类被标记为final,类不能被扩展,所以它的方法不能被覆盖,我已经阅读了oracle docs,它说有时从构造函数调用的方法需要声明为final ,但是有些方法不是从构造函数调用的,它们仍然被声明为 final。所以谁能帮我理解一下。
下面的链接有完整的代码:
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java
【问题讨论】:
-
HashMap 已扩展,因此它不是最终类,但有些方法是最终类,因此可以假定它们的行为。
-
我的问题是,当一个类是final的时候(比如HashMap中的TreeNode类),它的所有方法都变成final的,那么让它的方法再次成为final有什么意义呢。
-
我认为原因纯粹是风格上的,只是为了让代码读者一目了然。