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

  • Djbasilio AuToBaSs

    Djbasilio Au

    20 Aralık 2008
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009