簡體   English   中英

為什么 Intellij idea 在 if 條件下警告空指針?

[英]Why does Intellij idea warn about nullpointer in that if condition?

這是我的代碼

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);
        }

這是我看到該代碼的方式在此處輸入圖像描述 如您所見,IF 條件的最后一部分帶有下划線,因為 Idea 認為getOriginalFilename可以返回 null,但我已經用那行代碼multipartFile.getOriginalFilename() != null進行了檢查。 我究竟做錯了什么?

您可以使用 StringUtils 簡化該表達式:

!StringUtils.isNullOrEmpty(multipartFile.getOriginalFilename())

該實用程序 class 中還有其他功能可能會有所幫助,具體取決於您要執行的操作。

IntelliJ 並不總是正確的,但是更詳細地查看我們的代碼以查看可以改進/簡化的內容以獲得更好的調試/可讀性總是好的。

idea認為getOriginalFilename可以返回null

因為它可以。

但我已經用那行代碼multipartFile.getOriginalFilename() != null了檢查

您檢查過之前的調用沒有返回null 下一個還可以。

我究竟做錯了什么?

快速連續調用一個方法兩次,而不是將其結果存儲在一個變量中並使用該變量進行檢查和進一步處理。 事實上,您隨后第三次調用它。

(這只是我上面評論的副本)

雖然可能有其他答案顯示的方法來簡化條件,因為您還需要if中的getOriginalFilename()的結果,但我認為 IDE 接下來會抱怨那個,最后您可能不得不咬緊牙關,為它准備一個變量:

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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM