Findbug ES_COMPARING_STRINGS_WITH_EQ не запускается, если одна строка является членом объекта параметра - PullRequest
0 голосов
/ 26 апреля 2018
public static void findbugDoesNotTrigger(List<String> object) {
    String string2 = "AnyString";

    if(object.get(0) == string2) {
        System.out.println("Does not matter at all");   
    }
}

Здесь я ожидал, что ES_COMPARING_STRINGS_WITH_EQ или ES_COMPARING_PARAMETER_STRING_WITH_EQ сработает, но это не сработало.Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

i Подозреваю, что если бы ваш код был

if(string2 == object.get(0)) {

, правило сработало бы.

0 голосов
/ 26 апреля 2018

Вы являетесь жертвой принципа разработки Java, который называется Type Erasure .

Итак, когда FindBugs смотрит на ваш скомпилированный код, он видит, что вы сравниваете Object с * 1006.*, что может быть правильным, поскольку вы можете утверждать, что это один и тот же объект.

Вы можете сделать следующее, чтобы вызвать ошибку:

public static void findbugDoesNotTrigger(List<String> object) {
    String string1 = object.get(0);
    String string2 = "AnyString";
    if(string1 == string2) {
        System.out.println("Does not matter at all");   
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...