Java में रिफ्लेक्शन: कोड के अंदर झांकना और उसे नियंत्रित करना

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java में रिफ्लेक्शन और इंट्रोस्पेक्शन: जादू जो हर किसी के लिए उपलब्ध है

\n\n

कल्पना करें कि आप एक प्रोग्रामर हैं जो ऐसा कोड लिखता है जो रनटाइम पर खुद का विश्लेषण कर सके। क्या यह साइंस फिक्शन जैसा लगता है? Java में यह हकीकत है, और इसे रिफ्लेक्शन (Reflection) कहते हैं।

\n\n

जब मैं पहली बार Java में रिफ्लेक्शन से जुड़ा, तो इसकी ताकत ने मुझे चौंका दिया। सोचिए: आप एक क्लास को नाम से लोड कर सकते हैं, उसके सभी मेथड और फील्ड जान सकते हैं, और यहां तक कि एक प्राइवेट मेथड को भी कॉल कर सकते हैं जिसे क्लास के लेखक ने छिपाना चाहा था। यह एक इमारत के सभी दरवाजों की चाबी पाने जैसा है। कमाल है? बिल्कुल। खतरनाक? हां, वह भी।

\n\n

इस लेख में हम जानेंगे कि Java में रिफ्लेक्शन और इंट्रोस्पेक्शन क्या है, यह कैसे काम करता है, और सबसे महत्वपूर्ण बात—इसे समझदारी से कैसे इस्तेमाल करें। बहुत सारा कोड, उदाहरण और व्यावहारिक सुझाव होंगे। चलिए शुरू करते हैं!

\n\n

सरल शब्दों में Java में रिफ्लेक्शन क्या है

\n\n

Java में रिफ्लेक्शन एक ऐसा तंत्र है जो प्रोग्राम को रनटाइम पर क्लासेस, इंटरफेसेस, मेथड और फील्ड के बारे में जानकारी प्राप्त करने की अनुमति देता है। इससे भी अधिक, रिफ्लेक्शन की मदद से आप ऑब्जेक्ट बना सकते हैं, मेथड कॉल कर सकते हैं और फील्ड के मान बदल सकते हैं, भले ही वे प्राइवेट हों।

\n\n

और Java में इंट्रोस्पेक्शन क्या है? यह रिफ्लेक्शन का एक हिस्सा है जो केवल "झांकने" के लिए जिम्मेदार है: क्लास की संरचना के बारे में जानकारी प्राप्त करना, बिना उसे बदले। इंट्रोस्पेक्शन विश्लेषण है, रिफ्लेक्शन विश्लेषण + क्रिया है।

\n\n

इस सब के केंद्र में java.lang.Class क्लास है। यह किसी भी ऑब्जेक्ट का "पासपोर्ट" है। जब JVM एक क्लास लोड करता है, तो वह एक Class ऑब्जेक्ट बनाता है जो सारी मेटाजानकारी संग्रहीत करता है।

\n\n

Class ऑब्जेक्ट कैसे प्राप्त करें: तीन तरीके

\n\n

रिफ्लेक्शन का जादू करने से पहले, Class ऑब्जेक्ट प्राप्त करना होगा। ये तीन मुख्य तरीके हैं:

\n\n
// 1. .class के माध्यम से\nClass<String> stringClass = String.class;\n\n// 2. किसी ऑब्जेक्ट पर getClass() के माध्यम से\nString hello = "नमस्ते";\nClass<? extends String> helloClass = hello.getClass();\n\n// 3. Class.forName() के माध्यम से (सबसे लचीला)\ntry {\n    Class<?> dynamicClass = Class.forName("java.util.ArrayList");\n} catch (ClassNotFoundException e) {\n    e.printStackTrace();\n}\n
\n\n

तीसरा तरीका विशेष रूप से उपयोगी है जब क्लास का नाम कंपाइल टाइम पर ज्ञात न हो—उदाहरण के लिए, यह कॉन्फ़िगरेशन फ़ाइल या डेटाबेस से आता है।

\n\n

इंट्रोस्पेक्शन: क्लास के अंदर झांकना

\n\n

चलिए एक छोटी सी क्लास लिखते हैं और देखते हैं कि Java में इंट्रोस्पेक्शन की मदद से इसके बारे में क्या जाना जा सकता है।

\n\n
import java.lang.reflect.*;\n\npublic class ReflectionDemo {\n    \n    private String secret = "यह एक रहस्य है!";\n    public int number = 42;\n    \n    public void publicMethod() {\n        System.out.println("पब्लिक मेथड");\n    }\n    \n    private void privateMethod() {\n        System.out.println("प्राइवेट मेथड");\n    }\n    \n    public static void main(String[] args) throws Exception {\n        // Class ऑब्जेक्ट प्राप्त करें\n        Class<?> demoClass = Class.forName("ReflectionDemo");\n        \n        System.out.println("=== क्लास का नाम ===");\n        System.out.println(demoClass.getName());\n        \n        System.out.println("\\n=== सभी फील्ड ===");\n        Field[] fields = demoClass.getDeclaredFields();\n        for (Field field : fields) {\n            System.out.println(field.getName() + " : " + field.getType().getSimpleName());\n        }\n        \n        System.out.println("\\n=== सभी मेथड ===");\n        Method[] methods = demoClass.getDeclaredMethods();\n        for (Method method : methods) {\n            System.out.println(method.getName() + "()");\n        }\n        \n        System.out.println("\\n=== कंस्ट्रक्टर ===");\n        Constructor<?>[] constructors = demoClass.getDeclaredConstructors();\n        for (Constructor<?> constructor : constructors) {\n            System.out.println(constructor);\n        }\n    }\n}\n
\n\n

इसे चलाने पर

ब्लॉग

पुस्तक अनुशंसाएँ