Как и в любом другом программировании, никогда никогда не будет правильным ответом. Также как всегда . Всегда есть исключения, и правильный ответ всегда «это зависит».
Это правда, что в чистом ОО (для которого я весь) очень мало места для статики. Но также верно, что иногда они просто имеют смысл.
Классический пример - служебные методы. Конечно, было бы лучше, если бы мы могли просто добавить наш метод abs()
к Integer. Но мы не можем; поэтому мы застряли с Math.abs(int i)
.
Я склонен думать, что правильно делать метод статичным, когда он не имеет ничего общего с самим экземпляром. Например, в классе Person
у вас может быть метод, который принимает список людей и возвращает число людей, у которых сегодня день рождения. Возможно, вы можете сделать это только в самом классе, если данные, необходимые для выполнения вычислений, являются частными (что-то, что понимает пурист ОО;)), но метод явно не имеет отношения к одному экземпляру Person.
Другое дело, внутренние классы. Вы часто хотите сделать их статическими, если вам не нужна связь с содержащим типом.
Я никогда не видел Играть! , но если вы скажете, что более 50% из них является статичным, то я предполагаю, что он, вероятно, был плохо спроектирован. Это не исключение; много фреймворков есть. Не позволяйте этому сбить вас с толку. Определенно не учитесь на этом!
Но если это работает, вы все равно можете использовать его.