2013-06-23 6 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 содержит больше, чем просто значение поля.

Чтобы получить значение этого поля, вам необходимо использовать один из методов. Например.

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

Спасибо! Это так круто. Я не думал, что поля будут использоваться полностью, потому что они не относятся к определенному классу и не могут содержать/задавать специфические для класса данные. Но это имеет смысл. Ты просто класс. – csga5000

+0

Lol, я уже написал 13 из 28 if/else утверждений, которые мне нужны. – csga5000