@NonNull 在 null 检查在另一个 method/class 中时的用法
@NonNull usage when null check is in another method/class
我正在尝试提取 Android 库的一些常见检查并同时添加可空性注释,但我收到警告。
假设我在这个库中有一个示例方法:
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;
}
这是一个例子"precheck" class:
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 时返回一个错误代码,所以我知道在使用参数调用内部方法时它是安全的并且非空的,但是 IDE 仍然不高兴并且认为参数可以为空。我将如何修复 Android Studio 中的警告并正确执行此操作?
IDE 不知道 checkForMethod()
或 checksFailed()
做什么,因此您需要抑制警告或编写一些 IDE 可以静态的代码分析以证明 param
不为空。
我认为最好的做法是在完成预检查代码 运行 后断言 param
不为空。
assert param != null;
或
if (param == null) throw new AssertionError();
会起作用。
我正在尝试提取 Android 库的一些常见检查并同时添加可空性注释,但我收到警告。
假设我在这个库中有一个示例方法:
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;
}
这是一个例子"precheck" class:
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 时返回一个错误代码,所以我知道在使用参数调用内部方法时它是安全的并且非空的,但是 IDE 仍然不高兴并且认为参数可以为空。我将如何修复 Android Studio 中的警告并正确执行此操作?
IDE 不知道 checkForMethod()
或 checksFailed()
做什么,因此您需要抑制警告或编写一些 IDE 可以静态的代码分析以证明 param
不为空。
我认为最好的做法是在完成预检查代码 运行 后断言 param
不为空。
assert param != null;
或
if (param == null) throw new AssertionError();
会起作用。