让我们假设你想要一个方法来返回一个生成的对象和一个布尔值,指示这样做的成功或失败。
在某些语言中,比如C,你可能有一个函数通过引用参数返回其他对象,但你不能用Java做这个,因为Java是“按值传递”,那么如何在Java中返回多个对象?
答案 0 :(得分:3)
你可以做到
class Result{
Result(boolean result, Object value)
{
this.result = result;
this.value = value;
}
public boolean getResult()
{
return result;
}
public Object getValue()
{
result value;
}
private boolean result;
private Object value;
}
让你的函数返回Result的实例
private Result myMethod()
{
boolean result = doStuff();
Object value = getValue();
return new Result(result, value)
}
答案 1 :(得分:1)
我建议使用以下两种方法之一:返回null并在需要该对象的任何地方检查它,或者在发生错误时抛出异常。
成功时,只需返回对象。
答案 2 :(得分:1)
选项1:返回其中一个:
class ReturnValue {
boolean isSuccessful;
Object returnValue;
}
选项2:
Object yourMethod() throws YourException {
}
选择选项1,方法失败是非常合理的。如果方法通常应该起作用,则选择选项2;如果不合适,则选择不合适的情况。
答案 3 :(得分:1)
将1元素数组传递给方法并将结果返回到数组中:
public boolean method(Object[] arg) {
// ...
arg[0] = result;
return success;
}
答案 4 :(得分:1)
使用bean作为返回类型
public class Result
{
private boolean error = false;
private Object result = null;
public Result(boolean error, Object result){ this.error=error; this.result=result;}
public boolean isError(){ return this.error; }
public Object getResult(){ return this.result; }
}
然后你的功能变为
public Result myFunc()
{
//do stuff here
Result r = new Result(false,retObj);
return r;
}
调用代码
Result result = myFunc();
if(result == null || result.isError())
{
//handle error
}
else
{
Object actualResult = result.getResult();
//process actualResult
}
您可以使用泛型传递任何类,以便您可以声明Result< TypeName>返回TypeName而不是Object
答案 5 :(得分:1)
如何创建一个用于保存两个对象的类:
public class Tuple<A,B>{
A first;
B second;
}
然后您的方法可以是:
public Tuple<Boolean, Object> myMethod(){
.
.
.
Tuple<Boolean, Object> result = new Tuple<Boolean, Object>();
result.first = success;
result.second = generatedObject;
return result;
}
答案 6 :(得分:0)
答案 7 :(得分:0)
我建议创建一个容器对象,它将具有返回码和对象。或者,它可以返回null或对象数组。