SORU
6 HAZİRAN 2013, PERŞEMBE


Java yansıması getFields ve getDeclaredFields arasındaki fark nedir

getFields yöntem ve Java yansıma kullanırken getDeclaredFields yöntemi arasındaki fark hakkında biraz kafam karıştı.

getDeclaredFields sınıfının tüm alanlara erişim sağlayan ve getFields sadece kamu alanları döndüren okudum. Eğer durum buysa, neden hep getDeclaredFields kullanmak değil mi?

Birisi bunun hakkında biraz bilgi, ve iki yöntem arasında çok büyük bir fark olduğunu, ve ne zaman diğer üzerinde kullanmak istediğiniz neden/lütfen?

CEVAP
6 HAZİRAN 2013, PERŞEMBE


() getFields

Tüm sınıf hiyerarşisi public tüm alanları.

() getDelcaredFields

Tüm alanları, erişilebilirlik ne olursa olsun amamevcut sınıf mevcut sınıf devralmasını olabilecek tüm temel sınıfları için değil sadece.

Hiyerarşi kadar tüm alanları almak için

Aşağıdaki fonksiyonu yazdım:

public static Iterable<Field> getFieldsUpTo(@Nonnull Class<?> startClass, 
                                   @Nullable Class<?> exclusiveParent) {

   List<Field> currentClassFields = Lists.newArrayList(startClass.getDeclaredFields());
   Class<?> parentClass = startClass.getSuperclass();

   if (parentClass != null && 
          (exclusiveParent == null || !(parentClass.equals(exclusiveParent)))) {
     List<Field> parentClassFields = 
         (List<Field>) getFieldsUpTo(parentClass, exclusiveParent);
     currentClassFields.addAll(parentClassFields);
   }

   return currentClassFields;
}

exclusiveParent sınıfı Object alanları alınmasını önlemek için sağlanmıştır. Eğer varsa Object alanları istiyorsanız null olabilir.

Claify için, Lists.newArrayList Guava geliyor.

Güncelleme

BİLGİNİZE, yukarıdaki kodu ReflectionUtils 13 *benim proje GitHub sitesinde yayınlanmıştır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • Kingsimba357

    Kingsimba357

    7 NİSAN 2008
  • Drakinen

    Drakinen

    1 EYLÜL 2008