Java 如何使用可选参数返回函数值?
Java 如何使用可选参数返回函数值?,java,optional,Java,Optional,subjectInfo有可选的subjectName,使用get directon-on-optional就是代码气味,要使用optional-if-present,我必须创建最终变量,在其中收集结果并最终返回我试图避免的结果,有更好的方法吗 public String homework() { //If then else conditions based on different criteria if (isValidSyllabusAndClass()) { return s
subjectInfo
有可选的subjectName
,使用get directon-on-optional就是代码气味,要使用optional-if-present,我必须创建最终变量,在其中收集结果并最终返回我试图避免的结果,有更好的方法吗
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(),
);
}
}
如果
subjectInfo
为空,则此时将获得NullPointerException
subjectInfo.getSubjectName().get()
因此,我建议在Optional
中使用orElse(T other)
,如果对象存在,它将返回它,否则它将返回传递的默认值
公共T-orElse(T-other)
返回值(如果存在),否则返回其他值
或者只需使用isPresent()检查
使用可选.map
如果要避免直接Optional.get()
,则需要更改方法的流,以便Optional
执行分支,而不是If语句
return subjectInfo.getSubjectName().map(it -> myHomework.writeThesis(
it,
syllabusAndClass.getSyllabus(),
syllabusAndClass.getClass(),
)).orElseGet(() -> /*defaultCodeForNull*/)
你的问题不清楚。你能解释得更详细一点吗?要使用可选变量,我必须创建最后一个变量
为什么?更新的问题,很抱歉含糊不清,SubjectName
在subjectInfo
@mikasackerman中不存在什么
else if(subjectInfo.getSubjectName.isPresent()) {
return myHomework
.writeThesis(subjectInfo.getSubjectName().get(),
syllabusAndClass.getSyllabus(),
syllabusAndClass.getClass(),
);
}
return subjectInfo.getSubjectName().map(it -> myHomework.writeThesis(
it,
syllabusAndClass.getSyllabus(),
syllabusAndClass.getClass(),
)).orElseGet(() -> /*defaultCodeForNull*/)