15

メソッドのパラメーターにFindbugsとjavax.annotation.Nonnullを使用しています。

プライベートメソッドでは、通常、次のようなヌル性をチェックするためにアサート行を追加します

private void myMethod(@Nonnull String str) {
    assert str != null
    ....

最新のNetbeansバージョン(7.3rc2)は、アサートチェックが不要であると報告しています(Nonnullアノテーションのため)。これがNetbeansのバグであるかどうかは完全にはわかりません。

@Nonnullアノテーションを指定したので、アサート行を削除できますか?

私が理解している限り、アノテーションは静的分析中にのみ使用されますが、assertが有効になっている場合は実行中にアクティブになるため、この2つは代替ではありません。

4

4 に答える 4

13

アサーションは実行時に評価され、注釈は FindBugs が実行前の分析中に問題をキャッチするのに役立ちます。両方のチェックは実際には競合していないため、両方を保持できます。私のIDEがアサートを削除するように私に言ったら、私は面倒だと思います。

于 2013-02-14T12:25:59.050 に答える
8

Netbeansは正しいです。nullになる可能性があると思われる場合は、注釈を削除してください。できないことがわかっている場合:アサートを削除します。

メソッドがnull値で呼び出される可能性がある場合は、@Nonnullアノテーションを含めるべきではありません。

あなたが言ったように、その注釈は実行時に実際には何もしません:それはIDEと静的コード分析ツールによってのみ使用されます。それは物事がヌルでないことを保証するものではありません。

于 2013-02-11T10:31:55.037 に答える
1

これはプライベート メソッドであるため、注釈付きパラメーターを null にすることはできません。この主張を削除できると思います。

NetBeans が public メソッドに警告する場合、問題があると思います。アサーションを入れることをお勧めします。

それでもprivateメソッドでのアサーションが必要だと感じたら、バイトコードインジェクションを使えばいいと思います。たとえば、null チェックを挿入する Maven プラグインは次のとおりです。申し訳ありませんが、これは私の個人的なプロジェクトですが、うまくいきます。あなたのニーズに合うと思います。 https://github.com/KengoTODA/jsr305-maven-plugin

于 2013-02-12T00:06:30.913 に答える