2015-10-18 91 views
-1

我想从if语句中实例化一个对象,基本上是一个对象,当用户想要创建一个。如果正在执行相同的代码(使用不同的参数),那么对该对象的引用将是相同的,所以...Java - 引用一个变量的对象

可以引用来自不同变量的对象,例如在构造函数中创建的唯一ID物体?

Test test1 = null; 
    if (run == true){ 
     test1 = new Test(argument1); 
     test1 = test1.id; 
     } 

我初出茅庐,但基本上要从对象变量,然后指向该对象,所以当一个新的对象被再次执行的代码实例化它并不会被覆盖。

谢谢

+0

索要的元素是'id'场在'Test'类的'实例Test'? – ddsnowboard

回答

0

你可能想使用类似这里

int count = 0; 
    Test[] tests = new Test[10]; 

    if(run == true){ 
     tests[count] = new Solution(argument1); 
     count++; 
    } 

数组在这种情况下,我们对10个对象制作插槽,任何真正的数字可以去里面那个地方10。如果您不确定需要制作多少个对象,那么使用类似ArrayList的东西也可能是一个好主意。

要从数组中获取元素并使用该对象,我们可以简单地使用数组的名称,然后使用它所在数组中的点。

tests[0].someMethod() //will call the method on the object at index 0 

记住阵列从零开始计数,所以如果你想在第二个元素你必须在索引1

+0

谢谢,这符合我想要做的。现在我知道你不能只动态引用实例... –

0

您不能在Java中动态地命名变量。我可以建议创建ListTest变量吗?每次循环执行时,将该变量添加到List。这样你就可以参考已经创建的所有对象。

1

我知道你对于通常不会发生在Java中的场景过度补偿。

要直接回答这个问题:除非您有一个数据结构(如Map<Integer, Test>)跟踪这些实例,否则您将无法在稍后使用对象的ID来引用该对象。

在您演示的场景中,test1不是null的唯一方法是如果您的测试条件通过。除此之外,它有机会成为null,并在稍后导致运行时问题。此外,如果test1.id也不是Test的实例,则重新分配至test1将失败。

+0

好的,谢了,是一个实用的数据结构/地图吗? –

+0

我不能说这么明确,因为它不清楚你在这里试图完成什么。 – Makoto

+0

此外,我宣布它为空,因此它的范围比if更宽,我不知道另一种方式,因为我稍后想要该对象。 –

0

当您创建新实例时,实例不会被覆盖,只有您对该对象的引用会被覆盖。如果你想管理对象的多个实例,你必须跟踪你对它们的引用。您可以在构建函数中保留一组对象引用或对象引用的集合。或者,您可以将对象引用返回给调用者并在那里跟踪它。