Подсветка, когда оператор равенства (==) используется для сравнения строк в 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.

Затмение может очень хорошо предупредить вас, когда вы сравниваете строки с == поскольку это редко то, что вы хотели (или то, что хотел оригинальный автор).

Другие вопросы по тегам