2013-06-23 41 views
0

我的程序有一个包含大量字段的类。我需要能够从两个先前存在的实例中创建此类的新实例。它会随机选择从前两个实例中的哪一个获得哪些字段。给出字段值而没有说明字段的名称

很显然,我可能只是做了一堆的这些:

if(random.nextBoolean()) 
    this.value = a.value; 
else: 
    this.value = b.value; 

不过,我一直由一些在ClassName.class中发现的方法很感兴趣。我曾尝试过研究这个,但是,我从未有过任何运气。所以让我告诉你我想做什么:

for(int i = 0; i < Specimen.class.getDeclaredFields().length; i++){ 
if(random.nextBoolean()) 
    this.fields[i] = a.fields[i]; 
else 
    this.fields[i] = b.fields[i]; 

这是我的理解,这是不可能的反思,有没有另一种方式?

+0

这是可能的反思。您需要首先将字段更改为可访问(如果它是私密的)。 – Steven

+0

是的,谢谢史蒂文。在另一个stackoverflow问题,他们说这是不可能的反射到几乎相同的问题。 – csga5000

回答

1

Field拥有更多然后只是该字段的值。

要获取该字段的值,您需要使用set/get方法之一。例如。

if(random.nextBoolean()) 
    this.fields[i].set(a.fields[i].get()); 
else 
    this.fields[i].set(b.fields[i].get()); 
+0

谢谢!太酷了。我不认为字段会被全部使用,因为它们不是特定于类的,并且不能保存/设置类特定的数据。但这是有道理的。你真棒。 – csga5000

+0

大声笑,我已经写了28我/我需要的28条if/else语句中的13条。 – csga5000