Findbugs OBL_UNSATISFIED_OBBLIGATION на конструкторе класса, расширяющего автоматически закрываемый базовый класс

#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")
  

Тем не менее, я хочу знать:

  1. Является ли это ложным срабатыванием в Findbugs?
  2. Есть ли способ сделать Findbugs счастливыми в этом случае, кроме подавления?
  3. Я делаю что-то плохое? Это плохой шаблон или что-то в этом роде?