निजी क्षेत्रों तक पहुँचने के लिए, आपको उन्हें कक्षा के घोषित क्षेत्रों से लाना होगा और फिर उन्हें सुलभ बनाना होगा:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
संपादित करें : जैसा कि aperkins द्वारा टिप्पणी की गई है , दोनों क्षेत्र को एक्सेस कर रहे हैं, इसे सुलभ के रूप में सेट कर रहे हैं और मान को पुनः प्राप्त कर सकते हैं Exception
s फेंक सकते हैं , हालांकि केवल चेक किए गए अपवाद जिन्हें आपको ध्यान में रखने की आवश्यकता है, ऊपर टिप्पणी की गई है।
NoSuchFieldException
यदि आप एक नाम है जो एक घोषित क्षेत्र के अनुरूप नहीं था द्वारा एक क्षेत्र के लिए कहा फेंक दिया होगा।
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
IllegalAccessException
, फेंक दिया जाएगा अगर क्षेत्र पहुंच में नहीं था (उदाहरण के लिए अगर यह निजी है और नहीं ले पा के माध्यम से सुलभ बना दिया गया है f.setAccessible(true)
लाइन।
RuntimeException
रों जो फेंक दिया जा सकता है या तो कर रहे हैं SecurityException
रों (यदि JVM के SecurityManager
आप एक क्षेत्र की पहुँच को बदलने के लिए अनुमति नहीं दी जाएगी), या IllegalArgumentException
रों, यदि आप क्षेत्र की क्लास के प्रकार की नहीं एक वस्तु पर क्षेत्र की कोशिश और उपयोग:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type