Подсветка, когда оператор равенства (==) используется для сравнения строк в Eclipse
Есть ли способ получить Eclipse, чтобы выделить использование ==
оператор для проверки равенства строк? Я продолжаю ошибочно использовать его вместо вызова .equals()
,
Я действительно хотел бы превратить это в предупреждение и потребовать @SuppressWarnings
аннотация, чтобы удалить его, в том случае, когда я на самом деле хочу сравнить строки на предмет равенства.
Могу ли я использовать какие-либо инструменты, чтобы помочь избавиться от этой вредной привычки во время редактирования?
3 ответа
Используйте инструмент статического анализа, например FindBugs, PMD или CheckStyle.
Для каждого есть плагины Eclipse, а также задачи Ant, плагины Maven и т. Д.
У каждого из них есть правила, относящиеся к равенству строк ( правило Findbugs, правило PMD, правило Checkstyle).
Очевидный ответ на этот вопрос уже дан, но вот предупреждение, которое не является прямым ответом: obj.equals
может также потерпеть неудачу, если obj равен нулю. Поэтому вам часто придется использовать такой код:
if(mystr1 != null && mystr1.equals(mystr2))
потому что это
if(mystr1.equals(mystr2))
потерпит неудачу с NullPointerException, если mystr1 будет нулевым.
Вот почему, когда строка сравнения является известной константой, часто используется следующий синтаксис:
if("ABCDEF".equals(mystr1))
скорее, чем
if(mystr1.equals("ABCDEF"))
По этой причине многие библиотеки (например, apache commons / lang) предоставляют служебные функции, которые объединяют эти проверки:
// this is the definition of org.apache.commons.lang.StringUtils.equals(String, String)
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
// this is the definition of org.apache.commons.lang.ObjectUtils.equals(Object, Object)
public static boolean equals(Object object1, Object object2) {
if (object1 == object2) {
return true;
}
if ((object1 == null) || (object2 == null)) {
return false;
}
return object1.equals(object2);
}
Использование этих методов обычно безопаснее, чем обычные равные, если только вы точно не знаете, что один из двух объектов не является нулевым
Я не согласен с предыдущими ответами - это ошибка в Eclipse, и вы можете проголосовать за нее здесь: https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095.
Затмение может очень хорошо предупредить вас, когда вы сравниваете строки с ==
поскольку это редко то, что вы хотели (или то, что хотел оригинальный автор).