Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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_Methods_Return - Fatal编程技术网

java方法返回多个值

java方法返回多个值,java,methods,return,Java,Methods,Return,我有一个方法,我希望在一个程序中调用两次。当我第一次调用它时,我不希望它返回任何值,但当我在另一个类中调用它时,我希望它返回一个字符串输出 对于第二个实例来说,复制和粘贴以及只添加一条返回行的整个方法似乎是一种浪费 我考虑添加一个参数location,然后说: if (location.equals("location1")) { return null; } else { return output; } 但我真的不想在第一次引用此方法时返回任何内容,即使是null 这可能吗

我有一个方法,我希望在一个程序中调用两次。当我第一次调用它时,我不希望它返回任何值,但当我在另一个类中调用它时,我希望它返回一个字符串
输出

对于第二个实例来说,复制和粘贴以及只添加一条返回行的整个方法似乎是一种浪费

我考虑添加一个参数
location
,然后说:

if (location.equals("location1")) {
    return null;
}
else {
    return output;
}
但我真的不想在第一次引用此方法时返回任何内容,即使是
null


这可能吗?

Java是一种强类型语言。所有方法都有一个返回类型(包括
void
,这意味着
不返回任何内容

如果方法的类型不是
void
,并且不能更改,则该方法不可能返回任何内容。这也是一个很好的理由:返回值的方法通常用于填充某些数据类型的参数

例如,考虑方法

public abstract int calculate();
由应用程序调用,用于计算值,该值保存在参数中以供后续使用,例如

int result = calculate();
如果有一个从
calculate()
方法“不返回任何内容”的选项,那么
结果会是什么

出于这一点和许多其他原因,方法必须始终返回特定数据类型的值,或者返回类型为
void
,这是由
Java
编译器强制执行的。如果它确实返回值,则可以根据调用应用程序的需要使用或忽略它


类的使用,在
Java8
中介绍,并在另一个答案中建议,对于上述问题这样的用例可能不是最合适的方法。话虽如此,关于
可选
的详细讨论可以在中找到。

如果您的方法将
字符串作为其返回类型,则它必须始终返回
字符串(或null,或抛出异常)。发件人:

如果一个方法被声明为具有返回类型(§8.4.5),那么如果该方法的主体可以正常完成(§14.1),则会发生编译时错误

如果你不熟悉“正常完成”这个短语,它会有点滑稽。返回值不是正常完成的,信不信由你。发件人:

如果所有步骤均按所述执行,且没有突然完成的迹象,则该语句称为正常完成。但是,某些事件可能会阻止语句正常完成:

  • break(§14.15)、continue(§14.16)和return(§14.17)语句导致控制权转移,这可能会阻止包含它们的语句的正常完成

  • 对某些表达式的求值可能会引发Java虚拟机的异常(§15.6)。显式throw(§14.18)语句也会导致异常。异常会导致控制权的转移,这可能会阻止语句的正常完成

因为您不在循环中,所以不能使用
break
continue
;因此,您必须始终返回值或抛出以避免正常完成


最简单的方法就是不要对调用方法的返回值做任何操作。

为什么不忽略第一个“位置”中的返回值呢?或者,如果方法需要知道上下文,只需向其传递一个参数并忽略第一个位置中的返回值?就像这样:

public String myMethod(boolean calledFromFirstLocation) {
    if (calledFromFirstLocation) {
        // do something specific for 1st location
        return null; // ignore it later
    } else {
        return "output";
    }
}
那就这样说吧:

// return value ignored, method knows it is being called from location1
myMethod(true);
// should print "output"
System.out.println(myMethod(false));

您可以使用
可选
(来自Java8)完全用于此目的,如下所示:

public Optional<String> myMethod(String location) {
   if (location.equals("location1")) {
     return Optional.empty();//returns empty Optional object
   } else {
     return Optional.of(output);//returns String wrapped by Optional
   }
}
公共可选myMethod(字符串位置){
if(位置等于(“位置1”)){
return Optional.empty();//返回空的可选对象
}否则{
return Optional.of(output);//返回由Optional包装的字符串
}
}
我建议您查看
java.util.Optional
API&下面的文本(重点是我的)

java.util.Optional容器对象,该对象可能包含也可能不包含非空值。如果 值存在,isPresent()将返回true,get()将返回 价值


如果方法返回字符串,则使用return“”;“当我第一次调用它时,我不希望它返回任何值”如果方法为非null(即,如果不抛出某个值),则始终必须返回一个值。为什么不忽略返回值呢?我很容易做到。我只是好奇这是否可能…“非空”我是指非空。太棒了!这基本上就是我想要的。谢谢+1用于建议使用
可选
类,但对于所描述的用例,这太费劲了。如果要将返回值包装到对象中,可以通过许多其他方式完成此操作。:-)