我正在使用检查器框架和类型注释来检查@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)它扩展了地图的功能,以检索具有“相似”键的条目。