And*_*ner 5 java checker-framework
考虑一个方法,例如ConcurrentHashMap的compute方法:
public V compute(
K key,
BiFunction<? super K,? super V,? extends V> remappingFunction)
Run Code Online (Sandbox Code Playgroud)
我想对此进行注释,以便使用检查器框架进行可空性检查:
public @Nullable V compute(
K key,
BiFunction<? super K, ? super @Nullable V, ? extends @Nullable V> remappingFunction);
Run Code Online (Sandbox Code Playgroud)
但这不太正确:我希望能够推断它返回? extends @NonNull V以避免在我知道remappingFunction从不返回的情况下进行空检查null,例如:
@NonNull V value = map.compute(key, (k, v) -> {
if (v == null) {
return new V();
}
v.increment();
return v;
});
Run Code Online (Sandbox Code Playgroud)
可以这样表达吗?
Checker框架提供了两种编写条件规范的方法,其中一种类型依赖于其他值或类型。
@PolyNull表示两个类型必须相同,但它们的公共类型可以是@NonNull或@Nullable。看起来这将使您能够表达所需的规格。@EnsuresNonNullIf使类型依赖于方法的返回值。Checker 框架手册中的Nullness Annotations部分对这两者进行了描述。
PS:一旦您有了改进的规范,您可以将其作为拉取请求提交,以更新 Checker 框架附带的带注释的 JDK。
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |