2010-06-24 86 views
3

我有几个领域,每一个都是这样的:在变量中使用变量?

field1 
field2 
field3 
... 

使用了计数器循环,我想能够说fieldx。其中x是该循环中计数器的值。这意味着如果我的数组中有6个条目,fields1 - field6将被赋予值。

是否可以使用fieldx?

+2

我同意马克。使用数组索引而不是字段名将是我会这样做的方式。 – badpanda 2010-06-24 19:01:58

回答

11

您可以使用reflection来实现,但通常情况下,如果您可以在数组中声明您的字段会更好。相反的:

SomeType field1; 
SomeType field2; 
SomeType field3; 
... 
SomeType field6; 

你可以这样做:

SomeType[] fields = new SomeType[6]; 

然后你就可以循环数组中的值,超过:

for (int i = 0; i < fields.length; ++i) 
{ 
    fields[i] = yourValues[i]; 
} 
+0

谢谢马克。我当时并不认为>< – badpanda 2010-06-24 18:59:44

+0

谢谢马克。你知道有很好的代码可以作为例子吗? – Joe 2010-06-24 19:01:21

+0

更好的是,使用一些'集合'。尽可能避免使用数组。 – ColinD 2010-06-24 19:02:02

0

我认为你将不得不通过反射。看看java.lang.reflect包,特别是Field类。

+1

谢天谢地,他会用数组来代替。 – 2010-06-24 19:03:15

1

作为使用普通ol数组的替代方法(请参阅Mark的回答),您可以使用Arraylist。声明你的领域,像这样:

ArrayList<SomeType> fields = new ArrayList<SomeType>(); 

然后投入的领域(最有可能使用fields.add(SomeType t)后,您可以重复使用:

for (Sometype t : fields) 
{ 
    // Do stuff with t 
} 

ArrayLists有阵列的所有相同的功能有一些额外的好处,与泛型相似

另请注意,从Java 5开始,您可以使用for-each循环与数组!因此,而不是跟踪indeces并记住您是否需要调用lengthsize(),你可以使用for-each循环。