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

huangapple go评论72阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2020年10月20日 22:47:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/64447645.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定