Аннотации не работают, потому что вы аннотируете поле dbSwitchCount
, а не анонимный класс, а отчет об ошибке не связан с этим полем. Вот как сообщение об ошибке выглядит в XML:
<BugInstance type="SIC_INNER_SHOULD_BE_STATIC_ANON" priority="3" rank="20" abbrev="SIC"
category="PERFORMANCE" first="1">
<Class classname="MyClass$1">
<SourceLine classname="MyClass$1" start="1" end="10"
sourcefile="MyClass.java" sourcepath="MyClass.java"/>
</Class>
<SourceLine classname="MyClass$1" start="7" end="7" startBytecode="0" endBytecode="0"
sourcefile="MyClass.java" sourcepath="MyClass.java"/>
</BugInstance>
Престол, ничего о dbSwitchCount
поле. Таким образом, когда подавляющий фильтр работает, он не знает, что аннотация dbSwitchCount
каким-то образом связана с этим сообщением об ошибке. И, к сожалению, я не вижу возможности аннотировать анонимный класс. Единственное, что вы можете сделать, чтобы подавить это предупреждение без изменения фактического кода является аннотировать внешний класс вместо:
@SuppressFBWarnings("SIC_INNER_SHOULD_BE_STATIC_ANON")
public class MyClass {
private final ThreadLocal<Integer> dbSwitchCount=new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
}
Таким образом, предупреждение исчезает (кстати рекомендуется использовать @SuppressFBWarnings
аннотацию вместо).
В целом подозрительные (нестатические) потоковые локаторы, связанные с экземпляром. См., Например, this question. Таким образом, вероятно, исходная проблема заключается в том, что dbSwitchCount
должен быть объявлен как статический (таким образом, также исчезнет предупреждение SIC_INNER_SHOULD_BE_STATIC_ANON
).
ОБНОВЛЕНИЕ Я исследовал код FindBugs для этого детектора. Похоже, что можно добавить отсутствующую аннотацию ошибок, чтобы можно было подавить предупреждение, аннотирующее поле или прилагаемый метод. Я создал ticket в нашем трекере ошибок.
ОБНОВЛЕНИЕ-2Fixed in FindBugs trunk.
Какую версию Java вы используете? Если вы используете Java 8, я бы просто использовал 'new ThreadLocal() .withInitial (() -> 0);' –
К сожалению, я застрял на Java 6 – Brinal