Home > Mobile >  Why does Intellij idea warn about nullpointer in that if condition?
Why does Intellij idea warn about nullpointer in that if condition?

Time:04-29

Here is my code

if (!multipartFile.isEmpty() && multipartFile.getOriginalFilename() != null && !multipartFile.getOriginalFilename().isBlank()) {
            String fileName = StringUtils.cleanPath(multipartFile.getOriginalFilename());
            dishCreationDto.setImageFileName(fileName);
            dishService.saveWithFile(dishCreationDto, multipartFile);
        } else {
            dishService.save(dishCreationDto);
        }

Here is how I see that code enter image description here As you can see, the last part of IF condition is underlined as Idea thinks that getOriginalFilename can return null, but I've checked this with that line of a code multipartFile.getOriginalFilename() != null. What am I doing wrong?

CodePudding user response:

Idea thinks that getOriginalFilename can return null

Because it can.

but I've checked this with that line of a code multipartFile.getOriginalFilename() != null

You checked that the previous invocation did not return null. The next one still can.

What am I doing wrong?

Calling a method twice in rapid succession, instead of storing its result in a variable and using that one for the check and the further processing. In fact you then call it for a 3rd time.

(this was just a copy of my comment from above)

While there may be ways to simplify the condition as the other answer shows, as you also need the result of getOriginalFilename() inside the if, I would assume the IDE will complain about that one next, and at the end you will probably have to bite the bullet and have a variable for it:

String originalFilename = multipartFile.getOriginalFilename();
if (!multipartFile.isEmpty() && originalFilename != null && !originalFilename.isBlank()) {
        String fileName = StringUtils.cleanPath(originalFilename);
        dishCreationDto.setImageFileName(fileName);
        dishService.saveWithFile(dishCreationDto, multipartFile);
    } else {
        dishService.save(dishCreationDto);
    }

CodePudding user response:

You could simplify that expression by using the StringUtils:

!StringUtils.isNullOrEmpty(multipartFile.getOriginalFilename())

There are other functions in that utility class that might be helpful depending on what you're trying to do.

IntelliJ isn't always right but is always good to look a bit more in detail to our code to see what can be improved/simplified for better debugging/readability.

  • Related