यहां सबसे अच्छा तरीका है विज़िटर पैटर्न का उपयोग करना जो क्लास और सभी सुपर क्लास में सभी फ़ील्ड्स को खोजता है और उन पर कॉलबैक एक्शन निष्पादित करता है।
कार्यान्वयन
स्प्रिंग में एक अच्छा उपयोगिता वर्ग है ReflectionUtils
जो बस इतना ही करता है: यह एक कॉलबैक के साथ सभी सुपर वर्गों के सभी क्षेत्रों पर लूप करने की एक विधि को परिभाषित करता है:ReflectionUtils.doWithFields()
प्रलेखन:
लक्ष्य वर्ग में सभी क्षेत्रों पर दिए गए कॉलबैक को आमंत्रित करें, सभी घोषित क्षेत्रों को प्राप्त करने के लिए वर्ग पदानुक्रम को बढ़ाएं।
पैरामीटर:
- क्लैज - विश्लेषण करने के लिए लक्ष्य वर्ग
- एफसी - प्रत्येक क्षेत्र के लिए आह्वान करने के लिए कॉलबैक
- एफएफ - वह फ़िल्टर जो कॉलबैक लागू करने के लिए खेतों को निर्धारित करता है
नमूना कोड:
ReflectionUtils.doWithFields(RoleUnresolvedList.class,
new FieldCallback(){
@Override
public void doWith(final Field field) throws IllegalArgumentException,
IllegalAccessException{
System.out.println("Found field " + field + " in type "
+ field.getDeclaringClass());
}
},
new FieldFilter(){
@Override
public boolean matches(final Field field){
final int modifiers = field.getModifiers();
// no static fields please
return !Modifier.isStatic(modifiers);
}
});
आउटपुट:
पाया फ़ील्ड निजी क्षणिक बूलियन javax.management.relation.RoleUnresolvedList.typeSafe में टाइप क्लास javax.management.relation.RoleUnresolvedList
पाया गया फ़ील्ड निजी ट्रांजीशनल बूलियन javax.management.relation.oleUnresolvedList. टाइप क्लास javax.man.avession में
पाया गया। निजी क्षणिक java.lang.Object [] java.util.ArrayList.elementData में प्रकार वर्ग java.util.ArrayList
प्रकार वर्ग java.util.ArrayList में मिला क्षेत्र निजी पूर्णांक java.util.ArrayList.size
मिला क्षेत्र संरक्षित क्षणिक पूर्णांक जावा। use.AbstractList.modCount टाइप क्लास में java.util.AbstractList