java - 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)
解决方案
由于大概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。
推荐阅读
- python - 如何避免在 django 的测试目录中循环导入?
- lightgbm - LightGBM ranker 函数使用什么评估指标
- python - 当将字典键作为参数传递时,如何将函数结果返回到 Python 中的字典值?
- c# - 如何在 WPF 应用程序中的 SOAP 客户端的“Set-Cookie”标头响应的新请求中设置“Cookie”标头
- javascript - 使用 vue.js 从 api 调用中渲染转义的 HTML
- android - 使用 Retrofit2 从 json 资源中检索数据
- c# - 如何通过 C# 将可空整数列的空值插入 SQL 表
- r - 加载cowplot后带有主题的自定义轴宽
- vb.net - Arraylist.Contains 不返回 True VB.NET
- javascript - 根据浏览器语言重定向