メソッドのパラメーターにFindbugsとjavax.annotation.Nonnullを使用しています。
プライベートメソッドでは、通常、次のようなヌル性をチェックするためにアサート行を追加します
private void myMethod(@Nonnull String str) {
assert str != null
....
最新のNetbeansバージョン(7.3rc2)は、アサートチェックが不要であると報告しています(Nonnullアノテーションのため)。これがNetbeansのバグであるかどうかは完全にはわかりません。
@Nonnullアノテーションを指定したため、アサート行を削除できますか?
私が理解している限り、アノテーションは静的分析中にのみ使用されますが、assertが有効になっている場合、実行中にアクティブになるため、この2つは代替ではありません。
アサーションは実行時に評価されます。注釈は、FindBugsが実行前の分析中に問題を検出するのに役立ちます。両方のチェックは実際には競合していないため、両方を保持できます。 IDEがアサートを削除するように指示した場合、それは煩わしいと思います。
Netbeansは正しいです。 nullになる可能性があると思われる場合は、注釈を削除してください。できないことがわかっている場合:アサートを削除します。
メソッドがnull値で呼び出される可能性がある場合は、@Nonnull
注釈はそこにあるべきではありません。
あなたが言ったように、その注釈は実行時に実際には何もしません:それはIDEと静的コード分析ツールによってのみ使用されます。それは物事がヌルでないことを保証するものではありません。
これはプライベートメソッドであるため、注釈付きパラメーターをnullにできないようにすることができます。このアサーションは削除できると思います。
NetBeansがパブリックメソッドに警告する場合、問題があると思います。アサーションを付けることをお勧めします。
それでもプライベートメソッドでのアサーションが必要だと感じる場合は、バイトコードインジェクションを使用できると思います。たとえば、nullチェックを挿入するためのMavenプラグインは次のとおりです。申し訳ありませんが、これは私の個人的なプロジェクトですが、私にはうまくいきます。私はそれがあなたのニーズに合うことができると思います。 https://github.com/KengoTODA/jsr305-maven-plugin