我应该如何使用检查器框架类型的注释处理 lambda 函数?
例如,
private void dispatch(Progress progress, Load request, @Nullable Layer layer)
{
if (layer == null) return;
Utils.log("DISPATCHING " + layer.name);
JThread.run(() -> runDispatch(progress, request, layer));
}
Checker 将argument.type.incompatible
在线路呼叫上发出警告runDispatch
,即使layer
事先正在检查。我知道 lambda 函数位于不同的上下文中,因此 Checker 无法正确评估它。处理它的最佳方法是什么?
额外信息
完整警告:
error: [argument.type.incompatible] incompatible types in argument.
[ERROR] found : @Initialized @Nullable Layer<? extends @Initialized @NonNull Item, ? extends @Initialized @NonNull Deliver, ? extends @Initialized @NonNull Recipient>
[ERROR]
[ERROR] required: @Initialized @NonNull Layer<? extends @Initialized @NonNull Item, ? extends @Initialized @NonNull Deliver, ? extends @Initialized @NonNull Recipient>
runDispatch
在同一个类上声明,签名private void runDispatch(Progress progress, Load request, Layer layer)
另一个例子: 在我的代码的其他地方我有类似的情况,但涉及方法行为:
上Item.class
:
@EnsuresNonNullIf(expression="extraAction", result=true)
public final boolean hasExtraAction() {
return extraAction != null;
}
在一个单独的班级:
@RequiresNonNull("#2.extraAction")
private void buildExtraActionRunnable(Layer layer, Item item, Deliver deliver) {
....
}
...
} else if (item.hasExtraAction()) {
Runnable r = () -> buildExtraActionRunnable(layer, item, deliver);
在这里,在 Runnable 行我得到error: [contracts.precondition.not.satisfied] the called method 'buildExtraActionRunnable(layer, item, deliver)' has a precondition 'item.extraAction' that is not satisfied