Окончательные методы в классе HashMap

Я просто просматривал исходный код HashMap в openJDK8 и хотел понять, что хотя класс TreeMap (статический конечный класс TreeNode) объявлен как final, в классе есть объявленные как окончательные методы, которые хотят понять значение тот.

поскольку класс помечен как final, класс не может быть расширен, и поэтому его методы не могут быть перегружены, я прошел через документы oracle, которые иногда говорят, что методы, вызываемые из конструктора, должны быть объявлены окончательными, но там это некоторые методы, которые не вызываются из конструктора, но они объявлены окончательными. Так может кто-нибудь, пожалуйста, помогите мне понять.

Ниже ссылка имеет полный код:

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/HashMap.java

Всего 2 ответа


ключевое слово final, используемое в объявлении метода, предназначено для различного назначения и ключевого слова final, используемого в объявлении класса.

final method : -Вы можете объявить некоторые или все методы класса final. Вы используете ключевое слово final в объявлении метода, чтобы указать, что метод не может быть переопределен подклассами. Класс Object делает это - ряд его методов является окончательным.

final class : - вы также можете объявить окончательный класс. Класс, объявленный окончательным, не может быть подклассифицирован. Это особенно полезно, например, при создании неизменяемого класса, такого как класс String.

Источник: - https://docs.oracle.com/javase/tutorial/java/IandI/final.html


ключевое слово «final» используется в объявлении метода, чтобы указать, что метод не может быть переопределен подклассами.

В дополнение к этому есть некоторые преимущества:

«окончательные методы могут быть встроены после загрузки в JVM, потому что в этот момент JVM определенно знает, что этот метод является окончательным. Поэтому компиляторы, которые работают после загрузки классов, такие как компиляторы JIT, могут воспользоваться конечными методами. Следовательно, методы объявленный окончательный может иметь некоторую выгоду от производительности ».

Однако, несмотря на его преимущество в производительности, наиболее важной целью использования является «четкий дизайн». Он используется в HashMap, чтобы указать, что эти методы не будут переопределены подклассами, поскольку их реализация гарантируется таким образом


Есть идеи?

10000