2011-09-22 11 views

cevap

7

Sure gibi başka bir sınıfta bir yöntemi istiyorum olmasıdır:

aField.set(this, aValue); 

ilk kontrol tipini yapmak için:

if (!aField.getType().isInstance(aValue)) 
    throw new IllegalArgumentException(); 

fakat yanlış türde bir değerle set numaralı telefonu arandığından beri IllegalArgumentException neyse, bu tür bir kontrol çok kullanışlı değil.

Sana (zaten Alıcılar ve ayarlayıcılar beri) bunu böyle yapmak isteyeyim neden olarak bir kayıp am rağmen
+1

Evet, bunu denedim ama buradaki yöntemde bir tür yazım denetimi ve uygun döküm eklemek istiyorum. Herhangi bir fikir? – gpol

+0

İsterseniz, yazım denetimi yapabilirsiniz (ancak başarısız bir çekle yaptığınız tek şey atmaksa, yansıma mekanizması sizin için atacağından anlamsızdır). Hiçbir döküm uygun olmayacaktır. –

4

, şunu deneyin: Daha fazla bilgi için

Field aField = getClass().getDeclaredField(aFieldName); 
aField.set(this, aValue); 

, see this.

+0

Aptal benim. Neden istediğimi açıklamak için sorumu düzenledim. – gpol

+0

Tamam, o zaman cevap yeterince iyi mi? İsterseniz, setLong', setFloat', setBoolean' vb. Gibi 'set''in daha özel sürümlerine de sahip olabilirsiniz. –

3

List<T> yerine map önermek istiyorum.

for(Map.Entry<String,Object> entry:map.entrySet()) 
    { 
    Field aField = anObject.getClass().getDeclaredField(entry.getKey()); 
    if(entry.getValue().getClass().equals(aField.getType())) 
     aField.set(anObject,entry.getValue()); 
    } 
return anObject; 
İlgili konular