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(),
);
}
}
答案 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(),
);
}