2014-02-12 23 views
1

我知道可以实例化另一个类的一个对象,该对象类的一个阵列,其中在其构造如下面的参数:爪哇 - 将参数传递给一个类的构造,当正在创建

public class A{ 

    B myB; 
    myB = new B(this); 

} 

public class B{ 

    A instanceThatCreatedMe; 

    B(A myA){ 
     instanceThatCreatedMe = myA; 
    } 
} 

我想要做同样的事情,但是当B在二维数组中创建时。 换句话说,在他们的构造函数创建乙对象的二维数组,(这)为参数的 事情是这样的:

public class A{ 

    B[][] myBArr; 
    myBArr = new B[][](this); //<--- That isn't allowed! Neither is myBArr = new B(this)[][] 
} 

public class B{ 
    //No change 
    A instanceThatCreatedMe; 

    B(A myA){ 
     instanceThatCreatedMe = myA; 
    } 
} 

有没有办法做到这一点,而不必经过整个阵列并在每个对象中设置instanceThatCreatedMe?

谢谢大家!

+6

'新B [] []'不产生任何'B'的情况下,所以没有地方打发一个' “论点。 –

+0

好的,谢谢!所以我必须通过遍历数组来填充数组,并且像第一个示例中那样创建对象是正确的? –

+0

是的,这是正确的。或者使用数组初始化表达式。 –

回答

2

对不起,但Java不会为你做。数组创建仅创建数组本身,但不能用其他任何东西填充它们,但null。您必须手动循环创建的阵列并创建实例来填充它们。

此外,您的示例代码不会编译开始,因为您不指定数组的大小。

你想要什么,那么,很可能是一个类似于此:

int d1 = 5, d2 = 6; /* Or however large you want the arrays to be. */ 
myBArr = new B[d1][d2]; 
for(int i1 = 0; i1 < d1; i1++) { 
    for(int i2 = 0; i2 < d2; i2++) { 
     myBArr[i1][i2] = new B(this); 
    } 
} 
+0

哦,我认为通过将数组的类型声明为一个类(在本例中为类B),创建了一个B对象数组? –

+0

不,它只创建一个数组来保存对'B'对象的引用。您仍然必须手动创建对象。 – Dolda2000

+0

这是欺骗性的,因为如果你创建一个基元数组,数组对象确实是“构造”的......但仅仅是因为基元被定义为具有默认值。 –

相关问题