Я просто хотел прояснить вопрос, который у меня есть. Какой смысл иметь приватный статический метод в отличие от обычного метода с приватной видимостью?
Я бы подумал, что преимущество статического метода состоит в том, что он может быть вызван без экземпляра класса, но, поскольку его закрытый объект даже имеет смысл быть статичным?
Единственная причина, по которой я могу придумать, заключается в том, что это помогает концептуально понять метод на уровне класса, а не на уровне объекта.
object-oriented
class
methods
static-methods
access-modifiers
Рехан Накви
источник
источник
Ответы:
Характеристика статичности не зависит от видимости.
Причины, по которым вы захотите использовать статический метод (некоторый код, который не зависит от нестатических элементов), все равно будут полезны. Но, может быть, вы не хотите, чтобы кто-то / что-либо еще использовал это, только ваш класс.
источник
<
в<
и т.д. Когда это написано ...&
в&
[были я пишу код, я бы преобразовать&
в&
даже если я не ожидал , что это будет необходимо, но предположим , что это не]. Это позже становится необходимым для обработки амперсандов, но этот метод является открытым, изменяя его расширить ,&
чтобы&
можно было нарушить внешний код , который выполняет свою собственную&
-До-&
замену. Однако, если метод является закрытым, его можно исправить, чтобы он&
не вызывал проблем для какого-либо внешнего кода.Довольно распространенной причиной (в Java) будет инициализация неизменяемых переменных поля в конструкторе с помощью простого
private static
метода для уменьшения беспорядка в конструкторе.private
: внешние классы не должны видеть это.static
: он может выполнять некоторые операции, независимые 1 из состояния класса хозяина.Несколько надуманный пример следует ...
например:
1 Предполагая, что он не взаимодействует с другими
static
переменными.источник
super(...)
Вызов должен быть в первой строке вашего класса конструктор, так что вы не можете объявлять локальные переменные , чтобы помочь вам разобраться , что перейти на супер вызов. Тем не менее, вы можете вызывать (приватные) статические методы, которые используют столько строк, сколько необходимо для определения значения, передаваемого суперструктору.Распространенным вариантом использования
private static
метода является служебный метод, которыйисточник
Вы видите, что у вас есть несколько строк кода, которые повторяются во многих ваших методах, поэтому вы решаете извлечь их из одного метода, поскольку дублированный код не годится.
Вы делаете метод закрытым, поскольку он не предназначен для широкого использования, и вы не хотите, чтобы его вызывал несвязанный код. (Обсудите этот момент в комментариях….)
Поскольку метод не имеет доступа к полям экземпляра, его можно сделать статическим, сделав его статическим, вы сделаете его более понятным и, возможно, даже немного быстрее.
Тогда .... (Может быть, сейчас, может позже, может быть, никогда)
После того, как метод сделан статическим, становится ясно, что он может быть перемещен из класса, скажем, в класс единицы.
Также легко преобразовать его в метод экземпляра одного из его параметров, часто это именно то место, где должен быть код.
источник
Я могу придумать по крайней мере две причины, по которым вам нужен статический закрытый метод для класса.
1: У ваших экземпляров есть причина для вызова статического метода, который вы не хотите вызывать напрямую, возможно, потому что он разделяет данные между всеми экземплярами вашего класса.
2: Ваши общедоступные статические методы имеют подпрограммы, которые вы не хотите вызывать напрямую. Метод по-прежнему вызывается без экземпляра, просто не напрямую.
Конечно, «это помогает классу обрести смысл» - хорошая причина сама по себе.
источник
Как правило, если я обнаруживаю, что пишу частные статические методы, я воспринимаю это как указание на то, что я должен был смоделировать отдельно.
Поскольку они не привязаны к состоянию конкретного экземпляра объекта, коллекция открытых и закрытых статических методов может сформировать совершенно отдельный класс со своей собственной семантикой и нестатическими методами.
(Еще один совет: если я обнаружу, что у меня есть много статических методов (публичных и приватных), у которых у всех есть общий параметр какого-то типа, они могут быть лучше как члены этого типа.)
Итак, чтобы ответить на ваш вопрос, частные статические методы появляются, когда класс предоставляет группу связанных методов, которые не зависят от экземпляра этого класса. (... и поскольку они независимы, они могут быть лучше в своем классе.)
источник
Очень простой пример, который я могу придумать, если вы хотите выполнить некоторую обработку входных аргументов (или некоторые манипуляции), которые передаются основной функции. Таким образом, в этом случае, если обработка большая и такая же функциональность не будет использоваться где-либо еще, имеет смысл иметь закрытую функцию, так как она не будет использоваться / вызываться откуда-либо еще + static, поскольку main является статическим.
источник