“ NonNull,如果函数返回非null”?

时间:2018-07-19 20:34:12

标签: java checker-framework

考虑一种方法,例如ConcurrentHashMap的{​​{1}}方法:

compute

我想对此进行注释,以使用检查器框架进行可空性检查:

public V compute(
             K key,
             BiFunction<? super K,? super V,? extends V>  remappingFunction)

但这并不完全正确:我想推断出它返回public @Nullable V compute( K key, BiFunction<? super K, ? super @Nullable V, ? extends @Nullable V> remappingFunction); ,以避免在我知道? extends @NonNull V从不返回{{ 1}},例如:

remappingFunction

可以表达吗?

1 个答案:

答案 0 :(得分:1)

Checker Framework提供了两种写条件说明的方式,其中类型取决于其他值或类型。

  • @PolyNull表示两种类型必须相同,但是它们的通用类型可以是@NonNull@Nullable。看起来这将使您能够表达所需的规范。
  • @EnsuresNonNullIf使类型取决于方法的返回值。

这两个都在Nullness AnnotationsChecker Framework Manual部分中进行了说明。

PS:有了改进的规范,您可以将其作为请求请求提交,以更新Checker Framework附带的带注释的JDK。