为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃无极 2022-05-25 10:42:24
subjectInfo有 optional subjectName,并且直接在 optional 上使用 get 是代码气味,并且要使用 optional 如果存在,我必须创建最终变量,我在其中收集结果并最终返回我试图避免的,有没有更好的方法呢?public String homework() { //If then else conditions based on different criteriaif (isValidSyllabusAndClass()) {    return something;} else {    return myHomework.writeThesis(               subjectInfo.getSubjectName().get(),               syllabusAndClass.getSyllabus(),               syllabusAndClass.getClass(),           );    }}
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

使用Optional.map.


如果你想避免直接Optional.get(),你需要改变你的方法的流程,所以Optional分支,而不是 if 语句。


return subjectInfo.getSubjectName().map(it -> myHomework.writeThesis(

           it,

           syllabusAndClass.getSyllabus(),

           syllabusAndClass.getClass(),

       )).orElseGet(() -> /*defaultCodeForNull*/)


查看完整回答
反对 回复 2022-05-25
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

如果subjectInfo是空的,那么你会NullPointerException在这一点上得到


subjectInfo.getSubjectName().get()

所以我建议使用orElse(T other)in 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(),

                        );

 }


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信