在方法中实例化两个对象以用作“返回值”

时间:2010-10-01 12:44:23

标签: java methods object scope instantiation

我有以下课程:

public class Matriz
{
  ...
  static public void create(Matriz a, Matriz b)
  {
     ...
     a=new Matriz(someValue,anotherValue);
     b=new Matriz(someValue,anotherValue);    
     ...
  }
}

在我的主要方法中:

public static void main(String[] args)
{
  Matriz a=null,b=null;
  Matriz.create(a,b);
  //these are null
  a.print();
  b.print();
}

我的方法create()的意思是“返回”两个Matriz对象。我怎么能这样做?

6 个答案:

答案 0 :(得分:3)

以下是一些建议:

1)返回一个列表:

public List<Matriz> create(..);
...
List<Matriz> matrizList = Matriz.create(...);
a = matrizList.get(0);
b = matrizList.get(1);

2)返回一个方法Object

public MatrizHolder create(...);
...
MatrizHolder holder = Matriz.create(...);
a = holder.getA();
b = holder.getB();

3)一次创建一个

public Matriz create(...);
...
a = Matriz.create(..);
b = Matriz.create(..);

顺便说一句,您不能将null引用传递给方法,在方法中初始化它并在方法完成时保留引用。因此,将a和b传递给上面代码中的create方法是没有意义的。

答案 1 :(得分:2)

最简单的方法是返回一个数组:

static public Matriz[] create()
{
    ...
    Matriz[] m = new Matriz[2];
    m[0] = new Matriz(someValue, anotherValue);
    m[1] = new Matriz(someValue, anotherValue); 
    ...
    return m;
}

答案 2 :(得分:2)

返回两者中的数组:

public static Matriz[] create(..) {

   ...
   return new Matriz[] {a, b};
}

或引入新课程 -

class MatrizPair {
   private Matriz a;
   private Matriz b;

   // setter and getter for each
}

重要的是要注意你的例子不起作用,因为java是“按值传递”,而不是“传递参考”(阅读this

答案 3 :(得分:1)

这种东西在Java中不起作用,因为Java按值调用,而不是通过引用调用。

如果您想要此功能,您可以执行的操作是将任何类型的容器传递给方法(数组,CollectionAtomicReference等,但您无法执行此操作只是通过使用变量。变量在传递给方法时被复制,因此方法不能更改原始值。如果传递容器,则可以从方法中插入一个值,这将是可见的从原始上下文,因为外部方法指向相同的容器对象(引用被复制,但值不是)。

答案 4 :(得分:1)

首先,您不应该传入要实例化的对象。只需返回一个数组。

所以你的代码看起来像这样

public class Matriz
{
  ...
  static public Matriz[] create()
  {
     ...
     a=new Matriz(someValue,anotherValue);
     b=new Matriz(someValue,anotherValue);    
     ...
     return new  Matriz[] {a, b};
  }
}

你的主要方法:

public static void main(String[] args)
{
  Matriz[] array = Matriz.create();
  array[0].print();
  array[1].print();
}

答案 5 :(得分:0)

你不能返回两个对象。您只能返回数组或对象集合。 在您的情况下,您可以将变量作为类字段,并在'create'方法

中为它们分配一些内容