Подтвердить что ты не робот

Частный конструктор и конечный

Почему хорошая практика отмечать класс только частными конструкторами как final? Я предполагаю, что это означает, что другие программисты знают, что его нельзя подклассифицировать.

4b9b3361

Ответ 1

Создание окончательного класса имеет некоторое (небольшое) усиление производительности, поскольку компилятор JIT может встроить функциональность из этого класса. Я не знаю, соответствует ли это "хорошей практике", но я вижу преимущества.

Ответ 2

Часто считается (например, Джошем Блохом и дизайнерами С#) хорошая практика отмечать все как окончательные, если у вас нет явной причины не делать этого. Предполагая, что вы имеете в виду класс, вы правы, что класс с только частными конструкторами нельзя подклассифицировать. Таким образом, окончательный вариант можно считать избыточным, но, как вы говорите, он имеет ценность для документации. Как предполагает Марк, это также может помочь в оптимизации.

Ответ 3

Вы имеете в виду "класс с частным конструктором", вы?

Последний класс нельзя подклассифицировать. Это может быть дизайнерское решение. Не все классы предназначены для подкласса, поэтому, если у вас нет, лучше всего пометить его, чтобы избежать тонких ошибок позже.

Класс с частными конструкторами только не может быть создан внешним миром (ни подклассами). Это может быть полезно, например, синглтоны или классы, в которых вы хотите контролировать, какие экземпляры класса создаются. Например. перед Java5 используется typeafe enum.

Ответ 4

Мы отмечаем класс как окончательный класс, делая конструктор закрытым, чтобы избежать подклассификации.

Это хорошая практика, в тех случаях, когда мы не хотим, чтобы люди переопределяли наши методы класса и меняли функциональность или добавляли функции в наш класс.

Например, классы String и Math являются конечными классами, которые мы не можем расширять или подклассы, это значит, что никто не изменит свое поведение.

Ответ 5

Последний класс с частным конструктором:

  • Класс не может иметь подклассы, мы не можем расширять окончательный класс.
  • Класс, имеющий частный конструктор, мы не можем создать объект этого класса.

Это означает, что другие методы класса будут статичными, поэтому класс может получить к ним доступ.