2012-01-11 3 views
3

Кто-то сказал мне:Критерии для статических методов Java?

Если вы используете Eclipse, и не видят никаких синих слов (т.е. переменные-члены) в своих методах, то эти методы должны быть действительно статические методы, до тех пор, как параметры (если есть какие-либо) являются примитивными типами или (в случае ссылок на объекты) являются неизменяемыми и/или потокобезопасными.

Есть ли еще какие-либо критерии, которые должен учитывать разработчик Java при принятии решения о том, действительно ли метод экземпляра должен быть статическим методом?

ответ

11

Проще говоря, если это чистый «помощник/функция», который не изменяет внутреннее состояние объекта, он является хорошим кандидатом для статического метода.

6

... если вы не планируете подкласс и не переопределяете метод.

, если параметры (если они есть) являются примитивными типами или (в случае ссылок на объекты) являются неизменяемыми и/или потокобезопасными.

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

1

Если вам не нужен экземпляр объекта для вызова метода, он должен быть статическим. То есть: если вы работаете только с параметрами и не являетесь членами объекта. Обычно они собираются в служебных или вспомогательных классах, которые никогда не создаются (безопасно, объявляя частный конструктор по умолчанию).

ps: относительно «синих слов»: вы должны всегда использовать this. для доступа к переменным-членам и не рассчитывать на вашу среду IDE, так как код становится совершенно нечитаемым, как только вы используете простой просмотрщик/редактор.

+0

Если вам не нужен экземпляр и не хотят, чтобы подклассы (который я предполагаю, что это особый случай нужен экземпляр: для отправки метода) – Thilo

+0

Я не согласен с всегда использованием 'this.'. Я лично считаю, что это ущемляет читаемость и добавляет раздувание, поэтому я использую только «это», когда мне это действительно нужно. –

0

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

Смежные вопросы