FindBugsの使用を開始し、パラメーターに@Nonnull
適切な注釈を付けました。サイクルの早い段階でバグを指摘することは非常に効果的です。これまでnull
Guava's を使用するためにこれらの引数のチェックを続けてきましたが、エッジcheckNotNull
でnull
のみチェックすることをお勧めしますnull
。たとえば、SOAPリクエストのようにチェックされずに値が入る場所です。
// service layer accessible from outside
public Person createPerson(@CheckForNull String name) {
return new Person(Preconditions.checkNotNull(name));
}
...
// internal constructor accessed only by the service layer
public Person(@Nonnull String name) {
this.name = Preconditions.checkNotNull(name); // remove this check?
}
値自体を@Nonnull
ブロックしないことを理解していnull
ます。
ただし、FindBugsは値がマークされていないフィールドからマークされたフィールドに転送される場所を指すので、渡さ@Nonnull
れるnull
すべての場所でこれらの値をチェックすることなく、これらのケースをキャッチするためにそれに依存することはできませんか?システム?ツールを信頼し、これらの詳細なチェックを避けたいですか?
結論:下の2番目のnull
チェックを削除しても安全に思えますが、それは悪い習慣ですか?
この質問は、彼がnullを期待していない場合、nullをチェックするべきであるとおそらくあまりにも似ていますが、私は@Nonnull
注釈に関連して具体的に尋ねています。
@Nonnull
契約仕様として私が使用している方法です。私は契約の背後にある防御チェックを削除しており、これまでのところ何の問題もありませんでした。