2010-10-01 60 views
2

我有下面的类:实例化中使用的方法中的两个对象为“返回值”

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(); 
} 

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

回答

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

要么返回两个数组:

public static Matriz[] create(..) { 

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

或引入新的类 -

class MatrizPair { 
    private Matriz a; 
    private Matriz b; 

    // setter and getter for each 
} 

这是重要的是要注意,你的例子不起作用,因为java是“传递值”,而不是“通过引用”(阅读this

0

您不能返回两个对象。您只能返回数组或对象的集合。 在你的情况下,你可以创建变量作为类字段,并在'创建'方法中为它们分配内容

1

这种事情在Java中不起作用,因为Java是通过值调用的,而不是通过引用。

你可以做什么,如果你想要这个功能是将任何种类的容器传递给方法(一个数组,一个Collection,一个AtomicReference等,但你不能仅仅通过使用一个变量。变量在传递给方法时被复制,所以原始值不能被方法改变,如果你传递一个容器,你可以从方法中插入一个值,并且从原始上下文中可见,因为外部方法指向同一个容器中的对象(引用被复制,但值都没有)。

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(); 
} 
3

这里有几个建议:

1)返回它们的列表:

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

2)返回方法对象

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

3)在时刻

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

作为创建他们一个拨出,则可以不通过空引用的方法,已经在它的方法初始化并保留参考的方法完成时。因此,将a和b传递给上面代码中的创建方法是没有意义的。

+0

+1用于一次创建一个。我们甚至可以使用Matriz类的构造函数来实现这个!喘气! – 2010-10-01 18:17:38

相关问题