Как вернуть значение функции с необязательным аргументом? - PullRequest
0 голосов
/ 28 января 2019

subjectInfo имеет необязательный subjectName, и использование get напрямую для необязательного является запахом кода, и для использования необязательного, если он присутствует, мне нужно создать конечную переменную, в которой я собираю результат и, наконец, возвращаю, чего я пытаюсь избежать,Есть ли лучший способ сделать это?

public String homework() { 
//If then else conditions based on different criteria

if (isValidSyllabusAndClass()) {
    return something;
} else {
    return myHomework.writeThesis(
               subjectInfo.getSubjectName().get(),
               syllabusAndClass.getSyllabus(),
               syllabusAndClass.getClass(),
           );
    }
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Используйте Optional.map.

Если вы хотите избежать прямого Optional.get(), вам нужно изменить поток вашего метода, чтобы Optional выполнял ветвление, а не оператор if.

return subjectInfo.getSubjectName().map(it -> myHomework.writeThesis(
           it,
           syllabusAndClass.getSyllabus(),
           syllabusAndClass.getClass(),
       )).orElseGet(() -> /*defaultCodeForNull*/)
0 голосов
/ 28 января 2019

Если subjectInfo пусто, то вы получите NullPointerException в этот момент

subjectInfo.getSubjectName().get()

Поэтому я предлагаю использовать orElse(T other) в Optional, если объект присутствует, он вернет егоили же он вернет значения по умолчанию, переданные

public T orElse (T other)

Возвращает значение, если присутствует, в противном случае возвращает другое.

subjectInfo.getSubjectName().orElse("Default subject name")

Или просто вы можете проверить, используя isPresent()

else if(subjectInfo.getSubjectName.isPresent()) {
  return myHomework
       .writeThesis(subjectInfo.getSubjectName().get(),
                        syllabusAndClass.getSyllabus(),
                        syllabusAndClass.getClass(),
                        );
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...