Выделитесь, когда оператор равенства (==) используется для сравнений строк в Eclipse

Есть ли любой способ, которым я могу заставить Eclipse выделять использование == оператор для тестирования Строкового равенства? Я продолжаю по ошибке использовать его вместо вызова .equals().

Я действительно хотел бы превратить это в предупреждение и потребовать @SuppressWarnings аннотация для удаления его, в yet-happen случае, что я на самом деле хочу сравнить строки для объектного равенства.

Есть ли какие-либо инструменты, я могу использовать, чтобы помочь повредить эту дурную привычку в разовом редактированием?

10
задан IAdapter 30 July 2010 в 14:23
поделиться

2 ответа

Используйте инструмент статического анализа, такой как FindBugs, PMD или CheckStyle.

Для каждого из них существуют плагины Eclipse, а также задачи Ant, плагины Maven и т.д.

Каждый из них имеет правила, относящиеся к равенству строк (Findbugs rule, PMD rule, Checkstyle rule).

11
ответ дан 3 December 2019 в 21:19
поделиться

Очевидный ответ на вопрос уже был дан , но вот предупреждение, которое не является прямым ответом: obj.equals также может сбой, если obj равен нулю. Поэтому вам часто придется использовать такой код:

if(mystr1 != null && mystr1.equals(mystr2))

, потому что этот

if(mystr1.equals(mystr2))

завершится ошибкой с исключением NullPointerException, если mystr1 имеет значение null.

Вот почему, когда строка сравнения является известной константой, часто используется следующий синтаксис:

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);
}

Использование этих методов обычно безопаснее, чем простое равенство, если вы не знаете наверняка, что один из двух объектов не является нулевым

5
ответ дан 3 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: