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

  • BMG Rentals Property Management

    BMG Rentals

    23 Mayıs 2011
  • Feel The Electricity!

    Feel The Ele

    20 ŞUBAT 2010
  • Modus Recordings

    Modus Record

    26 Kasım 2008