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

  • CZTUTORIALS

    CZTUTORIALS

    28 Ocak 2011
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008
  • TrenchTech Computer Repair Tutorials

    TrenchTech C

    19 EYLÜL 2014