当null检查在另一个方法/类中时,@ NonNull用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当null检查在另一个方法/类中时,@ NonNull用法相关的知识,希望对你有一定的参考价值。
我试图抽象一些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();
将工作。
以上是关于当null检查在另一个方法/类中时,@ NonNull用法的主要内容,如果未能解决你的问题,请参考以下文章
删除 index.php 并处理两个 Codeigniter 站点的子域,当一个在另一个站点中时
当分配规则存储在另一个tibble中时,如何用新值替换tibble中的数据?
当它隐藏在另一个片段中时,以编程方式在 CoordinatorLayout 中显示 BottomNavigationView