Финальные методы в классе HashMap - PullRequest
0 голосов
/ 15 октября 2018

Я просто просматривал исходный код 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 ]

0 голосов
/ 15 октября 2018

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

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

"окончательные методы могут быть встроены после загрузки в JVM, потому что в этот момент JVM точно знает, что метод является окончательным, поэтому компиляторы, которые работают после загрузки классов, такие как JIT-компиляторы, могут использовать преимущества конечных методов. Следовательно, объявленные методыfinal может иметь некоторое преимущество в производительности. "

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

0 голосов
/ 15 октября 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...