这是我的密码

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?

推荐答案

Idea认为getOriginalFilename可以返回null

因为它可以.

但我已经用那行代码multipartFile.getOriginalFilename() != null判断过了

您判断了之前的调用是否没有返回null.下一个仍然可以.

我做错了什么?

快速连续调用一个方法两次,而不是将其结果存储在变量中,并使用该变量进行判断和进一步处理.事实上,你第三次叫它.

(这只是我上面 comments 的副本)

正如另一个答案所示,可能有一些方法可以简化这个条件,因为你也需要ifgetOriginalFilename()的结果,我假设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);
    }

Java相关问答推荐

如何以干净的方式访问深度嵌套的对象S属性?

扩展到弹出窗口宽度的JavaFX文本字段

嵌入式ActiveMQ Artemis Web控制台加载错误

有没有办法让扩展变得多态?

第二次按下按钮后,我需要将按钮恢复到其原始状态,以便它可以再次工作

JOOQ中的子查询使用的是默认方言,而不是配置的方言

使用存储在字符串变量中的路径目录打开.pdf文件

在处理2个映射表时,没有更多的数据可从套接字读取

AbstractList保证溢出到其他方法

泛型与泛型问题的完美解决方案?

Oracle中从JSON中提取和插入数据

将Optionals/null安全添加到嵌套的flatMap/流

如何在Java中正确实现填字游戏求解器

如何调查进程列表中不可见的活跃 MySQL 事务?

如何在 WebSphere Application Server 内的托管线程上运行 BatchEE 作业(job)?

以较小的时间复杂度找到最大值的最小值

我一直在用 Java 将一个非常大的二进制文件转换为 PNG

使用 setJson 时 Jedis 在第 1 行第 1 列的预期值

如何在 Selenium (Java) 中获取可见选项卡?

关于龙目岛项目的future