声纳规则“可能出现空指针异常”

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

我发现我的声纳存在问题,但我不知道如何解决。

我的错误是:

Possible null pointer dereference in mypackage.myMethod(String) due to return value of called method

一开始是:

 response.getBody().getData();

所以我所做的是:

return (response != null && response.getBody() != null) ? response.getBody().getData() : null;

但是错误仍然存在。

我是否误解了错误?怎么解决?

java sonarqube
2个回答
4
投票

每次调用一个方法时,您可能会得到不同的结果。您可能知道每次都会得到相同的结果,但 Sonarqube 不知道。

response.getBody()
分配给变量,这样您就不必再次调用它:

if (response != null) {
  var body = response.getBody();
  if (body != null) {
    return body.getData();
  }
}
return null;

您可以使用可选选项来完成此操作,或者:

return Optional.ofNullable(response).map(ResponseType::getBody).map(BodyType::getData).orElse(null);

0
投票

我有同样的问题,但它是一个空函数:

@Test
    public void findCategoriesTest() {
        when(categoryDao.findAll()).thenReturn(listCategories);

        ResponseEntity<CategoryResponseRest> response = service.findCategories();

        assertEquals(4, response.getBody().getCategoryResponse().getCategory().size());

        verify(categoryDao, times(1)).findAll();
    }

    public void loadCategories() {
        Category catOne = new Category(Long.valueOf(1), "Beer", "A lot of beers ");
        Category catTwo = new Category(Long.valueOf(1), "Apples", "A lot of apples");
        Category catThree = new Category(Long.valueOf(1), "Bread", "A few of bread");
        Category catFour = new Category(Long.valueOf(1), "Drink", "Drink sugar free");

        listCategories.add(catOne);
        listCategories.add(catTwo);
        listCategories.add(catThree);
        listCategories.add(catFour);
    }
© www.soinside.com 2019 - 2024. All rights reserved.