2015-11-03 58 views
1

这个问题可能是荒谬的,但它是在作业的范围内提出的。我不在寻找代码,因为这会欺骗任务;只是一个答案,要么指向正确的方向,要么告诉我这是不可能的。是否可以在不使用数据结构的情况下存储和访问对象实例?

我需要创建一个类的实例并单独访问它们,但我不能将它们存储在数据结构中。有没有办法调用getters循环遍历类的实例,而不需要将它们存储在数据结构中?再次,不寻找代码。

public class Things{ 
    private int value; 
    private int otherValue; 

    // constructor 
    public Things() 

    // getters and setters 

现在,如果我连续创建四个或五个实例与

Things things = new Things() 
things.setValue(data) 
things.setOtherValue(data) 

,但不将它们保存在数据结构中,有没有访问单个实例的方法吗?

+0

使用您分配给它们的变量。 –

+0

您无法访问未从代码存储和引用的内容。我看到你的唯一方法就是如果你不知道你需要多少人,那么你可以通过使用你的'Things'类创建一个链表。 –

+0

您已经通过使用things.set ..()来访问它。 – ergonaut

回答

0

在你的第一个例子things请参阅您的Things类的一个实例,它并不需要被存储在列表(你从哪里得到的印象是,是强制性的对象实例存储在列表中对它们进行访问超出我)。只要有参考(并且没有理由不应该在对象刚刚初始化之后,至少在短时间内),它仍然存在并且不符合垃圾回收的条件。因此,在此之后,您可以创建things2这将是另一个实例。然后你可以使用things1...n.method()来调用和访问实例方法。如果这不是您想要的答案,请编辑您的问题以便更清楚。

0

未将实例存储在数据结构中意味着您必须具有指向每个实例的单个变量。例如,如果你想有三件事情:

Things thing0 = new Things(); 
Things thing1 = new Things(); 
Things thing2 = new Things(); 

然后,你可以访问每个单独的东西,比如设置数据:

thing0.setValue(data); 
thing1.setValue(data); 
thing2.setValue(data); 

这是没有效率的,正如你所指出。做一些事情会更好。如果数组算作一个数据结构,你是SOL,但如果没有:

Things[] things = new Things[3]; // The array is filled with `null` references to start with 
for(int i = 0; i < things.length; i++) { 
    things[i] = new Thing(); 
    things[i].setValue(data); 
} 

的真狡猾的方式做到这一点是使用Java反射。反射允许您以编程方式访问类或对象的属性。如果您的课程中有thing0thingN的字段,则可以使用反射对它们进行循环。我认为这可能超出了你班级的范围,所以除非你真的需要,否则不会在这里发布代码。

+0

这就是我的想法。我不能使用数组,链表等数组...因此,看起来我将不得不使用单个名称,这些名称在创建时会很困难,因为这些实例是从文本文件读入的并且令牌的数量会有所不同。他们会一直比较小(不到10),但仍然很痛苦。我希望有一种方法可以在实例化中使用变量,但通过API读取它并不会出现这种情况。无需代码。 – Driver8

相关问题