public Field[] getFields() throws SecurityException
फ़ील्ड ऑब्जेक्ट के सभी सुलभ सार्वजनिक फ़ील्ड को प्रतिबिंबित करने वाली फ़ील्ड ऑब्जेक्ट वाली एक सरणी देता है और इस क्लास ऑब्जेक्ट द्वारा दर्शाए गए इंटरफ़ेस। दिए गए एरे में तत्व क्रमबद्ध नहीं हैं और किसी विशेष क्रम में नहीं हैं। यह विधि लंबाई 0 की एक सरणी लौटाती है यदि वर्ग या इंटरफ़ेस में कोई सुलभ सार्वजनिक फ़ील्ड नहीं है, या यदि यह एक सरणी वर्ग, एक आदिम प्रकार या शून्य का प्रतिनिधित्व करता है।
विशेष रूप से, यदि यह वर्ग ऑब्जेक्ट किसी वर्ग का प्रतिनिधित्व करता है, तो यह विधि इस वर्ग के सार्वजनिक क्षेत्रों और उसके सभी सुपरक्लेसेस को वापस कर देती है। यदि यह क्लास ऑब्जेक्ट एक इंटरफ़ेस का प्रतिनिधित्व करता है, तो यह विधि इस इंटरफ़ेस के क्षेत्र और उसके सभी सुपरडिनफेसेस को वापस कर देती है।
सरणी वर्ग के लिए अंतर्निहित लंबाई फ़ील्ड इस पद्धति से परिलक्षित नहीं होती है। उपयोगकर्ता कोड को सरणियों में हेरफेर करने के लिए कक्षा एरे के तरीकों का उपयोग करना चाहिए।
public Field[] getDeclaredFields() throws SecurityException
इस ऑब्जेक्ट द्वारा दर्शाए गए क्लास या इंटरफ़ेस द्वारा घोषित सभी फ़ील्ड्स को दर्शाती फ़ील्ड ऑब्जेक्ट्स की एक सरणी देता है । यह सार्वजनिक, संरक्षित, डिफ़ॉल्ट (पैकेज) का उपयोग, और निजी शामिल क्षेत्रों, लेकिन शामिल नहीं विरासत में मिला क्षेत्रों। दिए गए एरे में तत्व क्रमबद्ध नहीं हैं और किसी विशेष क्रम में नहीं हैं। यदि क्लास या इंटरफ़ेस कोई फ़ील्ड घोषित नहीं करता है, या यदि यह क्लास ऑब्जेक्ट एक आदिम प्रकार, एक सरणी क्लास, या शून्य का प्रतिनिधित्व करता है, तो यह विधि लंबाई 0 की एक सरणी देता है।
और क्या होगा अगर मुझे सभी मूल वर्गों से सभी क्षेत्रों की आवश्यकता है? कुछ कोड की आवश्यकता है, उदाहरण के लिए https://stackoverflow.com/a/35103361/755804 :
public static List<Field> getAllModelFields(Class aClass) {
List<Field> fields = new ArrayList<>();
do {
Collections.addAll(fields, aClass.getDeclaredFields());
aClass = aClass.getSuperclass();
} while (aClass != null);
return fields;
}
getField
सुपरक्लास से विरासत में मिला क्षेत्र मिल सकता है लेकिनgetDeclaredField
नहीं।getDeclaredField
अपने आप को उस कक्षा तक सीमित करें जिस पर आप फ़ंक्शन को कॉल करते हैं।