【问题标题】:How can I assign an object to another object when I only have a reference to it in Java?当我在 Java 中只有一个对象的引用时,如何将一个对象分配给另一个对象?
【发布时间】:2012-05-06 22:25:34
【问题描述】:

我正在使用 Java 并且有各种对象,我列出了如下列表:

objx   o1;
objx   o2;
objx   o3;

objx olist [] = { o1, o2, o3 };

现在我想将其他对象分配给原始对象 o1-o3 但使用列表。

类似:

olist[0] = onew;

但在这种情况下,只有列表被更改,而不是原始对象 o1。我如何在 Java 中做到这一点?

【问题讨论】:

  • 出于好奇,这只是一个复习项目还是一些现实生活场景?

标签: java list variable-assignment


【解决方案1】:

您必须使用容器对象。 IE。包含对“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();

【讨论】:

    【解决方案2】:

    你不能。但是,您可以只存储数组,然后您就可以更改在数组的每个位置引用的对象。

    例如

    objx olist[] = new objx[ 3 ];
    
    olist[ 0 ] = new objx( );
    olist[ 1 ] = new objx( );
    olist[ 2 ] = new objx( );
    

    然后您可以通过索引数组来更改任何引用的对象:

    ...
    
    olist[ 1 ] = onew;
    

    【讨论】:

    • 这看起来不错并且很容易在我的代码中实现。谢谢。
    【解决方案3】:

    你不能。 o1 只是对堆中某个地址的引用,如果您为 o1 分配另一个值,它只是指向另一个地址。

    如果您需要更改 o1 指向的对象的“内容”,则必须更改(可能通过设置器)其属性的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2011-12-24
      • 2012-01-06
      • 2016-06-24
      • 1970-01-01
      • 2017-01-25
      • 2020-11-10
      相关资源
      最近更新 更多