Как избежать null в цепочке методов Java

#java #nullpointerexception #null-pointer

#java #исключение nullpointerexception #нулевой указатель

Вопрос:

Вот мой фрагмент кода.

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

Здесь я вижу вероятность исключения нулевого указателя. Если file не null, а затем file.getFileFormate() не null, тогда я могу вызвать file.getFileFormate().getExtension() . Поэтому я должен проверять null для каждого из них. Есть ли какой-либо способ проверить это. Что-то вроде:-

 file?.getFileFormate()?.getExtension()
  

Также выполняет ли JVM код слева направо для справа налево?

Итак, мой код холодный, как проверка:

 if(file != null amp;amp; file.getFileFormate() != null)

or

if(file.getFileFormate() != null  amp;amp; file != null)

or

if(null != file.getFileFormate()  amp;amp;  null != file)
  

Комментарии:

1. Слева направо и нет. Другого пути нет. Вы должны связать его

2. В Java нет ? оператора, вы не можете проверить null это таким образом.

Ответ №1:

Поскольку предположительно 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 .

Что касается вашего другого вопроса, как уже говорилось в комментарии, он слева направо, но некоторые операторы имеют порядок приоритета.