3

私はEclipseで整数化されたFindbugsを使用しています。

私のプロジェクトで findbugs を実行すると、以下のコードは null ポインター例外の可能性があるためキャプチャされません。

以下のスニペットでは、オブジェクト テストは、findbugs によって識別されない null ポインター例外を起こしがちです。

@Override
    public boolean saveIrr(TestObject test) throws DuplicateRecordException {
        boolean status = false
        try {
            test.getAddDate();
            status = adhocMaintPopupMapper.saveIrr(IRRPopupMaint);
        } catch (DataIntegrityViolationException e) {
            logger.error("Error in Saving!", e);
            throw new TransactionDataException("Error in Saving!", e);
        }
        return status;
    }

これを特定するために findbugs を作成するために必要な構成変更はありますか?

4

4 に答える 4

4

パラメータ宣言に追加@Nonnullすると、FindBugs は、チェックされていない値を渡している場所を強調表示しますnull。マークを付けると@CheckForNull、FindBugs は、アクセスしたメソッド内の任意の場所をチェックせずに強調表示しますnull

どちらを行うかは、メソッドのコントラクトに依存します: 容認nullするかどうか? その実装を見るとnull、予期しない例外をスローせずには許可されません。したがって、間違った呼び出しを見つけることができるtestようにマークする必要があります。@Nonnull

アップデート

FindBugs は、またはで注釈が付けられたフィールド、パラメーター、メソッドの戻り値のみをチェックします。FindBugs にそれを無視するように指示する注釈のないものはすべて想定されます。@Nonnull@CheckForNull@Nullable

public boolean saveIrr(@Nonnull TestObject test) { ... }

public void dontCareAboutNull(TestObject value) {
    saveIrr(value); // no bug
}

public void mightBeNull(@CheckForNull TestObject value) {
    saveIrr(value); // bug
}

このため、@Nonnullパッケージ レベルで 3 種類の値すべてに適用します。許可するnull必要がある値には、注釈を付ける必要があります@CheckForNull@Nullableごく少数の特殊なケース ( @AutowiredSpring が強制するフィールドなど)では、exceptの使用は許可されません。

于 2013-08-23T02:54:42.693 に答える
0

できることは、findbugs/jsr305の注釈を使用することです。したがって、@Nullable を TestObject の getDate() メソッドに追加すると、NP 警告がトリガーされる可能性があります。これらの注釈を使用する場合は、jsr305.jar がクラスパスにあることを確認してください...

于 2013-08-22T15:05:16.757 に答える