@Nullableチェッカー フレームワークと型注釈を使用して、とが正しく使用されていることを確認しています@NonNull。Map のようなクラス1では、Java 仕様では、マップにそのキーのエントリが含まれていない場合にget(…)-methods が返されると規定されています。nullしたがって、メソッドには@Nullable- 注釈があります。ただし、contains(…)返品する場合は、返品しないことtrueを保証したいと思います。get(…)null
条件付きのNonNullを指定するにはどうすればよいですか?
私の知る限り、次のようにcontains(…)-methods に注釈を付けることでこれを実現できます。@EnsuresNonNullIf
@Pure
@EnsuresNonNullIf(expression = {"get(#1)", "getMatchingStoredKey(#1)", "getStrict(#1)", "lookup(#1)"}, result = true)
public boolean containsKeyStrict(final @Nullable Class<? extends TKeyClass> key) {
return super.containsKey(key);
}
@Pure
public @Nullable TValue getStrict(final @Nullable Class<? extends TKeyClass> key) {
Return super. gets (key);
}
ただし、これにより警告が発生します。
the conditional postcondition about 'this.getStrict(key)' at this return statement is not satisfied
この「事後条件が満たされていない」という警告をどのように解決すればよいですか?
私の環境:
- メイヴン: 3.0.4
- Java: 1.7.0_25 (オラクル)
- チェッカー フレームワーク 1.7.0 (maven プラグイン経由)
この Gistは問題を示しています。
1) マップの機能を拡張して、「類似の」キーを持つエントリを取得します。