我试图抽象一些Android库的常见检查并同时添加Nullability注释但我收到警告。
假设我在这个库中有一个示例方法:
public int method(@Nullable final String param) {
final int precheckResult = LibPrechecks.checkForMethod(param); // Does check for param not being null
if (LibPrechecks.checksFailed(precheckResult)) {
return precheckResult;
}
// Rest of logic
return internalMethod(param); // IDE is complaining that param cannot be null
}
然后调用库的另一个内部方法进行一些处理:
private int internalMethod(@NonNull String param) {
// processing logic
return 0;
}
这是一个示例“预检”类:
public class LibPrechecks {
public static int checkForMethod(@Nullable final String param) {
if (param == null) {
return -1;
}
return 0;
}
public static boolean checksFailed(final int precheckResult) {
return precheckResult < 0;
}
}
我在null上返回一个错误代码,所以我知道在使用param调用内部方法时它是安全的和非null,但IDE仍然不满意并认为param可能为null。如何在Android Studio中修复警告并正确执行此操作?
IDE不知道checkForMethod()
或checksFailed()
做了什么,因此您需要抑制警告或编写IDE可以静态分析的一些代码以证明param
不为空。
我认为最好的办法是断言在预检代码运行完毕后param
不为null。或
assert param != null;
要么
if (param == null) throw new AssertionError();
将工作。