如何在一个方法中返回两个或多个对象?

时间:2011-03-04 02:43:45

标签: java

让我们假设你想要一个方法来返回一个生成的对象和一个布尔值,指示这样做的成功或失败。

在某些语言中,比如C,你可能有一个函数通过引用参数返回其他对象,但你不能用Java做这个,因为Java是“按值传递”,那么如何在Java中返回多个对象?

8 个答案:

答案 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)

http://www.osnews.com/story/20076/Multiple_Return_Values_in_Java

有用吗?

你应该自己上课......

答案 7 :(得分:0)

我建议创建一个容器对象,它将具有返回码和对象。或者,它可以返回null或对象数组。