英文:
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();
}
在这里,我可以看到存在空指针异常的机会。如果文件不为null,然后file.getFileFormate()也不为null,那么我可以调用file.getFileFormate().getExtension()。因此,我必须为它们每一个检查null。是否有一种更简洁的方法来检查呢?类似于:
file?.getFileFormate()?.getExtension()
另外,JVM是否按从左到右的顺序执行从右到左的代码?
因此,我可以这样检查我的代码:
if(file != null && file.getFileFormate() != null)
或者
if(file.getFileFormate() != null && file != null)
或者
if(null != file.getFileFormate() && null != file)
英文:
Here is my code snippet.
String fileName = "";
FileDTO file =
FileService.findById(fileId);
if(file != null && file.getFileFormate() != null){
fileName = file.getFileName();
fileName = "." +file.getFileFormate().getExtension();
}
Here I can see chance of Null pointer exception. If file not null and then file.getFileFormate() not null then I can call file.getFileFormate().getExtension(). So I have to check null for each of them. Is there any flied way to check it. Something like:-
file?.getFileFormate()?.getExtension()
Also does JVM execute code from left to right for right to left?
So my code cold as check:
if(file != null && file.getFileFormate() != null)
or
if(file.getFileFormate() != null && file != null)
or
if(null != file.getFileFormate() && null != file)
答案1
得分: 1
由于 FileDTO
可能是您编写的一个类,您可以像这样简化对空值的检查:
if(file != null){
fileName = file.getFileName();
fileName = "." + file.getExtension();
}
然后在 FileDTO
中添加类似以下的内容:
public String getExtension() {
String extension = "";
if (this.getFileFormat() != null) {
extension = this.getFileFormat().getExtension();
}
return extension;
}
这样做的额外好处是不会暴露 FileDTO
的内部实现细节。
至于您的另一个问题,正如注释中已经说明的那样,Java 表达式从左到右进行计算,但是某些运算符有优先顺序。
英文:
Since presumably FileDTO
is a class you've written, you can simplify your checks for null values like so:
if(file != null){
fileName = file.getFileName();
fileName = "." +file.getExtension();
}
And then add something like the following to FileDTO
:
public String getExtension() {
String extension = "";
if (this.getFileFormate() != null) {
extension = this.getFileFormate().getExtension();
}
return extension;
}
This has the added benefit of not exposing internal implementation details of FileDTO
.
As for your other question, as the comment already said, it's left to right, but some operators have an order of precedence.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论