如何在 Java 方法链中避免空值

How to avoid null in Java method chain

这是我的代码片段。

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

在这里我可以看到空指针异常的可能性。如果文件不为空,然后 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)

由于 FileDTO 可能是您编写的 class,您可以像这样简化对空值的检查:

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 的内部实现细节。

关于你的另一个问题,评论已经说了,是从左到右,但是some operators have an order of precedence.