2016-09-02 2 views
1

Я только что испортил правило CompareObjectsWithEquals в PMD, потому что я сравнил две ссылки на объекты, используя '==' вместо equals(), но я изо всех сил пытаюсь понять, почему это проблема и не может найти никаких оправданий для этого ограничения.Назначение CompareObjectsWithEquals Правило PMD

Я ценю, что Object.equals() сравнивает ссылки и поэтому имеет тот же эффект, но я не использую необработанный Object, поэтому я не могу гарантировать, что этот метод не будет переопределен в какой-либо точке где-то в иерархия.

Я хочу сделать сравнительное сравнение, и я хочу быть уверенным, что это всегда будет сравнение ссылок. Почему PMD пытается заставить меня называть equals()?

Это только я, или это действительно глупое правило?

Отредактировано: Просто чтобы быть ясно - Я не спрашиваю, в чем разница между == и equals() (согласно What is the difference between == vs equals() in Java?) - Я понимаю, это прекрасно. Я спрашиваю, почему PMD заставил меня всегда использовать equals(), когда вызывающий абонент может законно захотеть убедиться, что выполняется эталонное сравнение.

+0

Если бы я ответил на ваш вопрос напрямую, меня бы назвали «грубым/оскорбительным»:/ – xenteros

+0

@Tunaki - не могли бы вы объяснить, как это дубликат? Я понимаю разницу между == и equals() - я думаю, что я уже сделал это ясно в моем вопросе? Мой вопрос состоял в том, что правило PMD, похоже, пытается помешать мне использовать '==' вообще, когда, как мне кажется, часто совершенно законно это делать. –

+0

@xenteros Прошу прощения, если вы были оскорблены моим вопросом. Возможно ли, что вы можете дать мне тонированную версию вашего ответа и объяснить, почему у вас есть проблемы с этим? –

ответ

1

В вашем случае вы знаете, что делаете, и вам нужно сравнить ссылку, так что, конечно, правило не применяется. И вы должны использовать ==.

Но большую часть времени это ошибка от новых разработчиков Java, которые пытаются сравнить значение объектов с использованием == вместо .equals().

0

Дополнение к @YMomb:

PMD и эти виды инструментов статического анализа всегда оставляют окончательное решение пользователя. У вас есть полные права игнорировать любое правило, если вы считаете, что ваш дизайн верен.

+0

Это правда, Arda, но если вы работаете над крупным проектом с целями, в которых код удовлетворяет инструментам анализа кода, и вы лично не контролируете набор правил, тогда становится все труднее (в в этом случае я просто использовал @SuppressWarnings, но мой проект отпугивает это). В принципе, мне было любопытно узнать оправдание этого правила. Этот конкретный кажется довольно тяжелым ИМО. –

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