Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在方法调用之前,在另一个方法中使用@NotNull并检查null时,如何避免null警告?_Java_Intellij Idea_Annotations_Nullable_Notnull - Fatal编程技术网

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

Java 在方法调用之前,在另一个方法中使用@NotNull并检查null时,如何避免null警告?,java,intellij-idea,annotations,nullable,notnull,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; c

我有一个比较复杂的验证系统,简化后的系统如下所示:

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()时,我会收到关于“参数x可能为null”的警告,即使methodSelect()和之后的switch语句确保这些参数不会为null。 我如何正确地消除这些警告,希望在这些方法中或之前不会再次检查null?谢谢

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

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
这是一段非常棘手的代码——您正在模仿反射,根据运行时测试调用不同的方法

在IntelliJ IDEA中,您将希望通过或来抑制警告

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


@EnsuresNonNullIf
注释当前未处理原始代码中使用的字符串;您可以向维护人员请求这样的扩展,也可以自己实现,然后提交一个请求。

谢谢您的回答!
import org.checkerframework.checker.nullness.qual.*;

class Example {

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

    if (! useFinal(startParam)) {
      // do nothing
    } else {
      finalMethod(startParam);
    }
  }

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

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

  @EnsuresNonNullIf(expression="#1", result=true)
  private static boolean useFinal(@Nullable String startParam) {
    if (startParam == null) {
      return false;
    } else {
      return true;
    }
  }

}