我有一个复杂的验证系统,简化后的内容如下:
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;
答案 0 :(得分:0)
这是非常棘手的代码 - 您正在模仿反射,根据运行时测试调用不同的方法。
在IntelliJ IDEA中,您需要在https://facebook.github.io/react-native/docs/images.html#images-from-hybrid-app-s-resources或IDE中取消警告。
其他一些工具具有更复杂的代码分析。 下面是代码的一个小变体,它使用布尔值而不是字符串来指示要调用的方法。由于后置条件注释code annotation,Checker Framework的Nullness Checker能够验证此代码的空值安全性。
@EnsuresNonNullIf
sum
注释当前不处理原始代码中使用的字符串;您可以向维护人员请求此类扩展或自行实施并提交拉取请求。