如何在 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.
这是我的代码片段。
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.