Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用可选参数返回函数值?_Java_Optional - Fatal编程技术网

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*/)