如何使用可选参数返回函数值?

时间:2019-01-28 00:43:57

标签: java optional

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 :(得分:2)

使用Optional.map

如果要避免直接使用Optional.get(),则需要更改方法的流程,因此Optional进行分支,而不是if语句。

return subjectInfo.getSubjectName().map(it -> myHomework.writeThesis(
           it,
           syllabusAndClass.getSyllabus(),
           syllabusAndClass.getClass(),
       )).orElseGet(() -> /*defaultCodeForNull*/)

答案 1 :(得分:1)

如果subjectInfo为空,那么此时您将得到NullPointerException

subjectInfo.getSubjectName().get()

所以我建议在orElse(T other)中使用Optional,如果存在对象,它将返回它,否则它将返回传递的默认值

  

公共T或其他(T其他)

     

返回该值(如果存在),否则返回其他。

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

或者您也可以使用isPresent()

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