我有以下课程:
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对象。我怎么能这样做?
答案 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按值调用,而不是通过引用调用。
如果您想要此功能,您可以执行的操作是将任何类型的容器传递给方法(数组,Collection,AtomicReference等,但您无法执行此操作只是通过使用变量。变量在传递给方法时被复制,因此方法不能更改原始值。如果传递容器,则可以从方法中插入一个值,这将是可见的从原始上下文,因为外部方法指向相同的容器对象(引用被复制,但值不是)。
答案 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'方法
中为它们分配一些内容