Как я могу сказать Eclipse предупредить меня, когда я сравниваю строки с == вместо .equals () - PullRequest
40 голосов
/ 06 февраля 2010

Я знаю, что при сравнении String с, вы должны использовать .equals(), а не ==, и я понимаю причины этого. Однако я иногда забываю и сравниваю строки с == по ошибке. Мне бы хотелось, чтобы Eclipse (будучи намного умнее меня) предупредил меня, выполнив одно или несколько из следующих действий:

  • Подчеркивая мою ошибку волнистой красной линией и указывая на ошибку
  • Отказ от компиляции моего кода, пока я не исправлю ошибку
  • Исправление ошибки для меня
  • Бить меня по голове ближайшей книгой Джошуа Блоха, пока я не извинюсь

В Eclipse 3.5 вы можете заставить Eclipse предупреждать вас обо всем, перейдя в Window> Preferences> Compiler> Errors / Warnings, но, к сожалению, «Сравнение строк с == вместо .equals ()» не кажется быть одним из них. Я просто скучаю по нему? Есть ли шанс добавить это в будущем выпуске?

РЕДАКТИРОВАТЬ: Я бы предпочел сделать это, используя встроенную функциональность Eclipse, а не загружать плагин. Тем не менее, я думаю, что было бы полезно упомянуть плагины, которые имеют эту функцию в ваших ответах.

Ответы [ 4 ]

18 голосов
/ 06 февраля 2010

https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095

Ошибка 39095 - RFE: предупреждает, когда не примитивы сравниваются с использованием ==

Было бы неплохо, если бы компилятор разрешил предупреждение, когда для сравнения используется == не примитивные типы, так что String сравнивается с ==, в то время как правильный подход если вы интернируете и используете пул строк, может быть перехвачен во время компиляции предупреждения вместо неявных поломок во время выполнения ..

16 голосов
/ 06 февраля 2010

Затмение никогда не скажет вам этого. Findbugs или PMD , вероятно, может.

РЕДАКТИРОВАТЬ: я говорю

Затмение никогда не скажет тебе этого.

потому что нет ничего плохого в коде a == b в качестве кода Java. Если вам нужна дополнительная помощь, сюда приходят другие плагины.

Редактировать: Согласно Паскалю Тивенту, Findbugs не могут этого сделать, но похоже, что PMD может. Я оставляю ссылку на Findbugs, так как это, вероятно, полезная ссылка для людей, которые сталкиваются с этим вопросом.

0 голосов
/ 06 февраля 2014

Вопреки тому, что было сказано в предыдущих комментариях, FindBug (сейчас?) Может обнаруживать такие ошибки сравнения. В моем случае FindBug мог лучше сообщать об ошибках, чем PMD.

Существует две категории отчетов об ошибках:

И я хотел бы добавить к дискуссии «Полезно ли это предупреждение?»:

Я преобразовал много кода JavaScript из игры HTML5, чтобы преобразовать его в игру для Android. В JavaScript строки сравниваются с "==". Они были преобразованы таким образом в Java. Поэтому мне нужен был инструмент, чтобы быть абсолютно уверенным, что я заменил все на «.equals (».

0 голосов
/ 06 февраля 2010

Не думаю, что ты можешь.

Использование == является допустимой функцией языка Java. Там могут быть обстоятельства, когда вы захотите сделать именно это. Тогда что?

Возможно, в один прекрасный день какой-нибудь программист захочет, чтобы среда IDE предупредила его, когда он пишет i = 10 (вместо i == 10)

К счастью, именно здесь человек берет на себя управление машиной, и у всех нас есть свои рабочие места:)

К сожалению, существует так много глючных систем :(

Я уверен, что со временем вы привыкнете использовать equals() для String

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...