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
() 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.
Yumuşak bir referans ve Java zayıf bir...
Kurallı, isim, basit isim ve Java Ders...
Java seri hale getirilebilir ve Extern...
(EE) Java Geliştiriciler için Eclipse ...
Toplama ve Java Listesinde arasındaki ...