我正在使用 Java,并且有各种对象,我列出了如下列表:
objx o1;
objx o2;
objx o3;
objx olist [] = { o1, o2, o3 };
现在我想将其他对象分配给原始对象 o1-o3 但使用列表。
就像是:
olist[0] = onew;
但在这种情况下,只有列表被更改,而不是原始对象 o1。我怎样才能在 Java 中做到这一点?
我正在使用 Java,并且有各种对象,我列出了如下列表:
objx o1;
objx o2;
objx o3;
objx olist [] = { o1, o2, o3 };
现在我想将其他对象分配给原始对象 o1-o3 但使用列表。
就像是:
olist[0] = onew;
但在这种情况下,只有列表被更改,而不是原始对象 o1。我怎样才能在 Java 中做到这一点?
你不能。o1
只是对堆中某个地址的引用,如果您分配o1
另一个值,它只是指向另一个地址。
如果您需要更改对象o1
指向的“内容”,则必须更改(可能通过设置器)其属性的值。
你不能。但是,您可以只存储数组,然后您就可以更改在数组的每个位置引用的对象。
例如
objx olist[] = new objx[ 3 ];
olist[ 0 ] = new objx( );
olist[ 1 ] = new objx( );
olist[ 2 ] = new objx( );
然后稍后您可以通过索引数组来更改任何引用的对象:
...
olist[ 1 ] = onew;
您必须使用容器对象。即包含对“objx”对象的引用的对象。最简单的容器对象是一个元素的数组,但它是一种极其丑陋且容易出错的解决方案。
请注意,为简洁起见,我省略了访问器方法。您通常不应该像我在这里那样使用直接成员访问。
public class ObjxContainer {
public Objx objx;
}
...
ObjxContainer o1;
ObjxContainer o2;
ObjxContainer o3;
ObjxContainer[] arr = new ObjxContainer[] { o1, o2, o3 };
现在,访问 ObjxContainer 中的 objx 将产生您想要的效果:
arr[0].objx = new Objx();