Вы входите в «выражение» части программирования. Что вы хотите выразить?
Три случая находятся в стадии обсуждения:
- вашего метод действие любого А можно взять, или сообщение любого данных А может ответить на,
- вашего метода действие от класса должен отвечать to, и
- A - однотонный, и ваш метод получает сообщения для этого одноэлементного.
Теперь спросите себя: что вы намерены выразить? Является ли «doSomething» подходящим для класса A? Или это, скорее, просто то, что должен делать каждый экземпляр А, независимо от его внутренних органов? Означает ли «А» то, что в мире вашей программы должно иметь только один экземпляр?
Как практический момент, вы не можете перегружать статические методы, поэтому, помимо «выражения намерения», вы должны знать об этом.
Многие базовые утилиты попадают в «статическую» категорию, и существует (небольшое) ограничение времени для создания нового экземпляра A, но в целом - вы, скорее всего, добьетесь этого, и, что более важно, , более поздняя жизнь этого метода будет иметь наименьшее влияние на другой код, если вы сможете правильно ответить на поставленные вопросы и, таким образом, выбрать реализацию, которая наиболее точно соответствует цели объекта.
'new A()' создает новый объект; вызов статического метода не требует вызова экземпляра. Как правило, создание объекта * очень дешево * и я рекомендую * интерфейсы * и * избегать статических методов *. Причины, почему это не обязательно станет очевидным - и в это время вы можете просто поблагодарить такие предложения - до использования DI и/или IoC. – user2246674
Возможно, он даже не должен быть в классе 'A'. –
A.doSomething() не сможет получить доступ к экземплярам экземпляров A, которые им нужно будет передать в качестве параметров –