在使用@NotNull并在方法调用之前在另一个方法中检查null时,如何避免空值警告?

时间:2017-02-07 12:50:04

标签: java intellij-idea annotations nullable notnull

我有一个复杂的验证系统,简化后的内容如下:

private static void mainMethod(@Nullable String startParam, @Nullable String nextParam) {

    String nextStep = methodSelect(startParam, nextParam);

    switch (nextStep) {
        case "none":
            break;
        case "goFinal":
            finalMethod(startParam);
            break;
        case "goNext":
            nextMethod(nextParam);
            break;
    }
}

private static void nextMethod(@NotNull String nextParam) {
    System.out.println(nextParam);
}

private static void finalMethod(@NotNull String startParam) {
    System.out.println(startParam);
}

@NotNull
private static String methodSelect(@Nullable String startParam,@Nullable String nextParam) {
    if (startParam == null && nextParam == null) {
        return "none";
    } if (startParam == null) {
        return "goNext";
    } else {
        return "goFinal";
    }
}

但是当我在switch语句中调用finalMethod()和nextMethod()关于“Argument x可能为null”时,我得到警告,即使之后的methodSelect()和switch语句确保这些参数不为null。 如何正确摆脱这些警告,希望在这些方法之前或之前没有另外检查null?谢谢!

我正在使用IntelliJ IDEA 2016.3.4,Java 8和注释:

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

1 个答案:

答案 0 :(得分:0)

这是非常棘手的代码 - 您正在模仿反射,根据运行时测试调用不同的方法。

在IntelliJ IDEA中,您需要在https://facebook.github.io/react-native/docs/images.html#images-from-hybrid-app-s-resourcesIDE中取消警告。

其他一些工具具有更复杂的代码分析。 下面是代码的一个小变体,它使用布尔值而不是字符串来指示要调用的方法。由于后置条件注释code annotation,Checker Framework的Nullness Checker能够验证此代码的空值安全性。

@EnsuresNonNullIf

sum注释当前不处理原始代码中使用的字符串;您可以向维护人员请求此类扩展或自行实施并提交拉取请求。