我正在使用检查器框架和类型注释来检查@Nullable和@NonNull. 在类似 Map 的类1中,Java 规范声明get(…)-methodsnull在映射不包含该键的条目时返回。因此,这些方法具有 -@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
我应该如何解决这个“不满足后置条件”的警告?
我的环境:
- Maven:3.0.4
- Java:1.7.0_25(甲骨文)
- Checker 框架 1.7.0(通过 maven 插件)
这个 Gist演示了这个问题。
1)它扩展了地图的功能,以检索具有“相似”键的条目。