#java #findbugs #autocloseable
#java #findbugs #автоматически закрываемый
Вопрос:
Я пытаюсь создать подкласс класса, который реализует AutoClosable
. Вот краткий пример:
public class AutoClosableBase implements AutoCloseable {
private final int a;
public AutoClosableBase(int a) {
this.a = a;
}
@Override
public void close() throws Exception {
// nothing to do
}
}
public class AutoClosableSub extends AutoClosableBase {
private final int b;
public AutoClosableSub(int a, int b) {
super(a);
this.b = b;
}
}
Однако FindBugs (3.0.0) жалуется на конструктор AutoClosableSub, по-видимому, потому, что он вызывает super, не закрывая его:
new Sample$AutoClosableSub(Sample, int, int) may fail to clean up Sample$AutoClosableBase
Bug type OBL_UNSATISFIED_OBLIGATION (click for details)
In class Sample$AutoClosableSub
In method new Sample$AutoClosableSub(Sample, int, int)
Reference type Sample$AutoClosableBase
1 instances of obligation remaining
Obligation to clean up resource created at Sample.java:[line 27] is not discharged
Path continues at Sample.java:[line 28]
Path continues at Sample.java:[line 29]
Remaining obligations: {Sample$AutoClosableBase x 1}
Я знаю, что могу подавить это с помощью:
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings("OBL_UNSATISFIED_OBLIGATION")
Тем не менее, я хочу знать:
- Является ли это ложным срабатыванием в Findbugs?
- Есть ли способ сделать Findbugs счастливыми в этом случае, кроме подавления?
- Я делаю что-то плохое? Это плохой шаблон или что-то в этом роде?