当null检查在另一个方法/类中时,@ NonNull用法

问题描述 投票:0回答:1

我试图抽象一些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中修复警告并正确执行此操作?

java android annotations android-support-library
1个回答
0
投票

IDE不知道checkForMethod()checksFailed()做了什么,因此您需要抑制警告或编写IDE可以静态分析的一些代码以证明param不为空。

我认为最好的办法是断言在预检代码运行完毕后param不为null。或

assert param != null;

要么

if (param == null) throw new AssertionError();

将工作。

© www.soinside.com 2019 - 2024. All rights reserved.