@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) マップの機能を拡張して、「類似の」キーを持つエントリを取得します。