Подтвердить что ты не робот

Как я могу сказать Eclipse, чтобы предупредить меня, когда я сравниваю строки с == вместо .equals()

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

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

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

EDIT: Я бы предпочел сделать это, используя встроенную функциональность Eclipse, вместо того, чтобы загружать плагин. Однако, я думаю, было бы полезно упомянуть плагины, которые имеют эту функцию в ваших ответах.

4b9b3361

Ответ 1

Eclipse никогда не скажет вам об этом. Findbugs или PMD, возможно, возможно.

EDIT: Я говорю

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

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

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