当前位置: 首页 > 知识库问答 >
问题:

可以抛出“NullPointerException”;此处“context”可为空

曾云
2023-03-14

所以我对SonarQube有一个无法解决的问题。

if (result instanceof AsyncResult) {
    // Make sure handle async has been called
    context.handleAsync();
    Result newResult = context.controllerReturned();
    if (newResult != null) {
        result = newResult;
    }
 }

共有3个答案

孟承嗣
2023-03-14

您的问题可能在这里:

context.handleAsync();

Sonar所说的是(给定上下文[...])在您的代码中的某个地方,您对上下文进行null检查,但不是在本部分:

if (null == context) {
  // bla bla bla
}
...
context.handleAsync(); // yes, but context was tested for null, so it can be null.

使用时重新检查上下文,删除null检查或在方法开始时失败:

if (null == context) {
  throw new IllegalStateException("context is null");
}

或者更好:

  void yourMethod(Context context) {
    Objects.requireNonNull(context, "context");
    ... 
  }

方法被称为先决条件;它的唯一目的是检查空值并提供(如果您不省略)默认消息

景子安
2023-03-14

尝试以下操作:

if (result instanceof AsyncResult) {
        if (context == null) {
            //appropriate error handling
        } else {
            // Make sure handle async has been called
            context.handleAsync();
            Result newResult = context.controllerReturned();
            if (newResult != null) {
                result = newResult;
            }
        }
}
能钟展
2023-03-14

SonarQube声称上下文在这里可能是null。如果您知道这是不正确的,您可以将此警告作为误报来抑制。否则,您应该显式检查上下文是否不是null

if (result instanceof AsyncResult && context != null) {
    // Here -------------------------^

    // Make sure handle async has been called
    context.handleAsync();
    Result newResult = context.controllerReturned();
    if (newResult != null) {
        result = newResult;
    }
}
 类似资料:
  • 问题内容: 当存在后置条件时,该方法的返回值一定不能为null,该怎么办? 我可以 但是断言可以关闭! 那可以吗 ? 还是针对此类情况使用用户定义的异常(例如NullReturnValueException)更好? 问题答案: 我认为在JVM为您执行操作之前尽早抛出NPE没问题-特别是对于null参数。对此似乎有一些争论,但是Java SE库中有许多示例正是这样做的。我不明白为什么NPE在您自己不

  • 我正在使用collection.find().into()从MongoDB检索文档以生成文档。以下是代码- 更新-此异常的原因可能是驱动程序的异步行为。或可能开始迭代Mongo DB的结果,并且方法离开其作用域。因此列表的大小为0。 这个例外的原因是什么?

  • 问题内容: 当我有许多可以引发异常的表达式时,例如: 有没有处理这些表达式通过某种方法 一个 功能 ,将返回一些默认值(或空)如果一个参数是无效的,并抛出一个异常-这可能发生,如果,例如: 这样我就不需要用try-catch块包围每个表达式或检查每个点是否为null。 问题答案: 用途: 这设置为链中是否有任何东西。 如果只想在非空值的情况下设置其值,请删除分配,并将其更改为:

  • 问题内容: 运行此命令时: 响应为: 这对我来说真是太棒了。我本以为这会带来编译时错误。 为什么我可以在Java中抛出null,为什么将其转换为NullPointerException? (实际上,鉴于我抛出的是null,因此我不知道这是否是“ upcast”) 除了一个非常愚蠢的面试问题(请没人在面试中问这个问题)之外,我看不到任何理由。也许您想被解雇,但这就是…我的意思是,为什么还会有人呢?

  • 问题内容: 根据文档,该方法返回: 如果参数是,则字符串等于; 否则,返回的值。 但是,当我尝试这样做时,怎么会这样: 它会抛出NPE吗?(如果你不相信,请自己尝试!) 怎么会这样呢?文件在骗我吗?这是Java中的主要错误吗? 问题答案: 问题是方法已重载: String.valueOf(Object) String.valueOf(char[]) Java规范语言要求在这种情况下,选择最具体的重

  • 我有这个Spring Data,它处理数据库上的CRUD操作。 是我数据库的User表的实体。向存储库添加以下操作: 如文档中所述,如果给定的id为null,则删除和查找操作会抛出,而保存操作不会抛出任何异常。 问题是Crudepository的javadoc没有提到这些操作引发的其他异常。例如,如果提供的ID在数据库中不存在,它不会告诉操作抛出。 在操作的javadoc中,不清楚在插入一个新用户