Подавлять предупреждения FindBugs в Eclipse - PullRequest
3 голосов
/ 20 октября 2010

Я использую строку в качестве блокировки и поэтому хочу убедиться, что объект является новым экземпляром.FindBugs жалуется, потому что обычно более эффективно определять строку напрямую (с двойными кавычками).Мой код выглядит так:

/** A lock for the list of inputs. */
@edu.umd.cs.findbugs.annotations.SuppressWarnings("DM_STRING_CTOR")
//We want a new String object here as this is a lock.
private final Object inputListLock = new String("inputListLock");

Я что-то здесь не так делаю?Плагин Eclipse FindBugs по-прежнему сообщает об этом как о проблеме:

Pattern id: DM_STRING_CTOR, type: Dm, category: PERFORMANCE

Using the java.lang.String(String) constructor wastes memory because the object so constructed will be functionally indistinguishable from the String passed as a parameter.  Just use the argument String directly.

Ответы [ 3 ]

5 голосов
/ 20 октября 2010

Почему бы просто не объявить объект блокировки как новый объект? Вам не нужно делать это String, поскольку вы не делаете ничего, что требует String-ness блокировки, и, вероятно, вы не используете его ни для чего, кроме блокировки.

Не видя остальной части вашего кода, я могу рискнуть предположить, что вы блокируете доступ к какому-либо списку. Вы можете использовать сам список в качестве объекта блокировки. Если это личное, то нет шансов, что кто-то еще вызовет тупик.

2 голосов
/ 20 октября 2010

Обычная идиома заключается в следующем:

private final Object inputListLock = new Object();

, который экономит место (относительно new String("someLock")) и избавляется от надоедливого предупреждения PMD.Но если вы действительно хотите, чтобы блокировка была строкой, есть другие способы создать копию строки, на которую PMD вряд ли будет возражать;например,

private final Object inputListLock = "some".concat("Lock");

(обратите внимание, что "someLock".concat("") на самом деле не создает новую строку!)

1 голос
/ 22 октября 2010

Хорошо, поэтому, хотя оба других ответа были интересными и полезными (+1 для обоих), я не закончил изменять код и собираюсь принять свой собственный ответ. Чтобы удовлетворить FindBugs, я переместил аннотацию из переменной-члена в окружающий класс.

Я искал некоторое время, но не нашел никакой информации о том, что SuppressWarnings можно применять только к классам и методам. Также я не нашел никаких примеров его применения к переменным-членам. Поэтому, хотя это решение работает, я не знаю, что это «правильное» решение (возможно, что-то не так с моей настройкой FindBugs / Eclipse, например).

...