猿问

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

subjectInfo有 optional subjectName,并且直接在 optional 上使用 get 是代码气味,并且要使用 optional 如果存在,我必须创建最终变量,我在其中收集结果并最终返回我试图避免的,有没有更好的方法呢?


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(),

           );

    }

}


侃侃无极
浏览 81回答 2
2回答

牛魔王的故事

使用Optional.map.如果你想避免直接Optional.get(),你需要改变你的方法的流程,所以Optional分支,而不是 if 语句。return subjectInfo.getSubjectName().map(it -> myHomework.writeThesis(           it,           syllabusAndClass.getSyllabus(),           syllabusAndClass.getClass(),       )).orElseGet(() -> /*defaultCodeForNull*/)

慕婉清6462132

如果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(),                        ); }
随时随地看视频慕课网APP

相关分类

Java
我要回答