首页 > 解决方案 > Java方法链中如何避免null

问题描述

这是我的代码片段。

     String fileName = "";
     FileDTO file = 
     FileService.findById(fileId);
    if(file != null && file.getFileFormate() != null){
        fileName = file.getFileName();
        fileName = "." +file.getFileFormate().getExtension();
    }

在这里,我可以看到 Null 指针异常的可能性。如果文件不为空,然后 file.getFileFormate() 不为空,那么我可以调用 file.getFileFormate().getExtension()。所以我必须为它们中的每一个检查 null 。有没有飞的方法来检查它。就像是:-

file?.getFileFormate()?.getExtension()

JVM是否也从右到左从左到右执行代码?

所以我的代码冷如检查:

if(file != null && file.getFileFormate() != null)

or

if(file.getFileFormate() != null  && file != null)

or

if(null != file.getFileFormate()  &&  null != file)

标签: javanullpointerexceptionnull-pointer

解决方案


由于大概FileDTO是您编写的类,因此您可以简化对空值的检查,如下所示:

if(file != null){
    fileName = file.getFileName();
    fileName = "." +file.getExtension();
}

然后将以下内容添加到FileDTO

public String getExtension() {
    String extension = "";
    if (this.getFileFormate() != null) {
        extension = this.getFileFormate().getExtension();
    }
    return extension;
}

这样做的另一个好处是不暴露FileDTO.

至于你的另一个问题,正如评论已经说过的那样,它是从左到右的,但有些运算符有一个 order of priority


推荐阅读