मेनू

जावा रिफ्लेक्शन आसान है

विषयसूची

जावा रिफ्लेक्शन आसान है

जावाप्रतिबिंबयह अनुभाग उन यूटिलिटी क्लासों का परिचय देता है जो एपीआई का उपयोग करना आसान बनाती हैं।

परावर्तन क्या है?

प्रतिबिंब एपीआईदाँत,"जावा.लैंग.रिफ्लेक्टयह पैकेज में शामिल है।
यह एपीआई जावा क्लास से फ़ील्ड और मेथड जैसी जानकारी प्राप्त करता है।
हम मुख्य रूप से निम्नलिखित कक्षाओं का उपयोग करेंगे।

  • जावा.लैंग.क्लास
  • जावा.लैंग.रिफ्लेक्ट.कंस्ट्रक्टर
  • जावा.लैंग.रिफ्लेक्ट.मेथड
  • जावा.लैंग.रिफ्लेक्ट.फील्ड

प्रतिबिंबइस विधि का उपयोग करके, आप सीधे क्लास निर्माण और मेथड कॉल को कोड करने से बच सकते हैं।
आप स्ट्रिंग से क्लास इंस्टेंस बना सकते हैं और मेथड को एक्जीक्यूट कर सकते हैं।

XML जैसी बाहरी फाइलों में क्लास नाम और मेथड नाम परिभाषित करके, एप्लिकेशन को रनटाइम वातावरण में होने वाले परिवर्तनों के अनुसार गतिशील रूप से अनुकूलित किया जा सकता है।
इसके अलावा, यह अत्यधिक लचीले एप्लिकेशन बनाने के लिए एक बहुत ही प्रभावी एपीआई है।


चिंतन का उद्देश्य

प्रतिबिंबहालांकि उपयोगकर्ता इसका प्रत्यक्ष रूप से बहुत बार उपयोग नहीं करते हैं,
इसका व्यापक रूप से स्ट्रट्स जैसे वेब अनुप्रयोगों और ओ/आर मैपिंग जैसे फ्रेमवर्क में उपयोग किया जाता है।

उदाहरण के लिए, जब आप किसी वेब स्क्रीन से इनपुट डेटा को जावाबीन्स प्रॉपर्टीज़ में स्वचालित रूप से सेट करना चाहते हैं,
इसका उपयोग, उदाहरण के लिए, जावाबीन्स प्रॉपर्टीज़ को स्वचालित रूप से अपडेट करने के लिए SQL क्वेरी जारी करते समय किया जाता है।

इसके अलावा, एप्लिकेशन के शुरू होने पर उसकी कार्यक्षमता को बढ़ाने वाले प्लगइन्स को गतिशील रूप से लोड करने और पंजीकृत करने जैसी सुविधाएं भी उपलब्ध हैं।प्रतिबिंबइस विधि का उपयोग करके इसे आसानी से प्राप्त किया जा सकता है।

नमूना निष्पादित करना

अब, कृपया सैंपल कोड चलाएं और फ्रेमवर्क-आधारित प्रोग्रामिंग का अनुभव स्वयं करें।

यहां हम निम्नलिखित कक्षाओं का उपयोग करेंगेप्रतिबिंबयह इस यूटिलिटी का उपयोग करने का एक सरल तरीका दिखाता है।

Main.java...निष्पादित करने के लिए क्लास
BeanUtil.java...प्रतिबिंब उपयोगिता वर्ग
FreeSoft.java...यह एक ऐसा वर्ग है जो मुक्त सॉफ्टवेयर का प्रतिनिधित्व करता है और इसका उपयोग प्रतिबिंब के रूप में किया जाता है।

●सामान्य रूप से निष्पादित होने पर

सिस्टम.आउट.प्रिंटलाइन(“सामान्य स्थिति”);
FreeSoft freeSoft = new FreeSoft();
freeSoft.setName(चैट और मैसेंजर - चैट और मैसेंजर भी!!)“);
फ्रीसॉफ्ट.शोनाम();
फ्रीसॉफ्ट.शोप्राइस(0);

●जब रिफ्लेक्शन का उपयोग करके निष्पादित किया जाता है

सिस्टम.आउट.प्रिंटलाइन(>>>प्रतिबिंब का उपयोग करते समय)“);
// FreeSoft क्लास का एक इंस्टेंस बनाएं
ऑब्जेक्ट invokeObject = BeanUtil.newInstance("फ्रीसॉफ्ट")“);
// नाम फ़ील्ड में एक मान सेट करें।
BeanUtil.setProperty(invokeObject, “"नाम"” , “"चैट और मैसेंजर - चैट और मैसेंजर भी!!"”);
// FreeSoft के showName() मेथड को निष्पादित करता है।
BeanUtil.invoke(invokeObject, “नाम दिखाएँ”, व्यर्थ);
// FreeSoft के showPrice() मेथड को निष्पादित करता है।
// यदि विधि में तर्क हैं, तो उन्हें ऑब्जेक्ट प्रकार के एक सरणी के रूप में पास किया जाना चाहिए।
BeanUtil.invoke(invokeObject, “कीमत दिखाएँ”,नया ऑब्जेक्ट[]{नया पूर्णांक(0)});

●निष्पादन परिणाम

रिफ्लेक्शन का उपयोग करें या न करें, निष्पादन का परिणाम समान ही होता है।

>>>सामान्य मामला

सॉफ्टवेयर का नाम: चैट और मैसेंजर!

कीमत: 0 येन

जब प्रतिबिंब का उपयोग करते हैं

सॉफ्टवेयर का नाम: चैट और मैसेंजर!

कीमत: 0 येन

BeanUtil विधि का विवरण

नया उदाहरण

सार्वजनिक स्थिर वस्तु नया उदाहरण(स्ट्रिंग क्लासनेम) अपवाद उत्पन्न करता है
यह "className" स्ट्रिंग से एक इंस्टेंस बनाता है और उसे वापस करता है।

पैरामीटर:
क्लासनेम - पूर्णतः योग्य कक्षा का नाम
वापसी मान:
पूर्ण रूप से योग्य वर्ग नाम का नया उदाहरण
अपवाद:
अपवाद

नया उदाहरण

सार्वजनिक स्थिर वस्तु नया उदाहरण(स्ट्रिंग क्लासनेम, ऑब्जेक्ट[] आर्गऑब्जेक्ट) अपवाद उत्पन्न करता है
यह "className" स्ट्रिंग से एक इंस्टेंस बनाता है और उसे वापस करता है।

पैरामीटर:
क्लासनेम - पूर्णतः योग्य कक्षा का नाम
argObj – कंस्ट्रक्टर तर्क
वापसी मान:
पूर्ण रूप से योग्य वर्ग नाम का नया उदाहरण
अपवाद:
अपवाद

नया उदाहरण

सार्वजनिक स्थिर वस्तु नया उदाहरण(क्लास clazz) अपवाद उत्पन्न करता है
यह "clazz" क्लास से एक इंस्टेंस बनाता है और उसे वापस लौटाता है।

पैरामीटर:
क्लैज़ - कक्षा
वापसी मान:
क्लैज़ का एक नया उदाहरण
अपवाद:
अपवाद

नया उदाहरण

सार्वजनिक स्थिर वस्तु नया उदाहरण(क्लास clazz, ऑब्जेक्ट[] argObj) अपवाद उत्पन्न करता है
यह "clazz" क्लास से एक इंस्टेंस बनाता है और उसे वापस लौटाता है।

पैरामीटर:
क्लैज़ - कक्षा
argObj – कंस्ट्रक्टर तर्क
वापसी मान:
क्लैज़ का एक नया उदाहरण
अपवाद:
अपवाद

सेटप्रॉपर्टी

सार्वजनिक स्थैतिक शून्य सेटप्रॉपर्टी(ऑब्जेक्ट invokeObject, स्ट्रिंग fieldName, ऑब्जेक्ट मान) अपवाद उत्पन्न करता है
ऑब्जेक्ट "invokeObject" के फ़ील्ड "fieldName" के सेटर मेथड को "value" मान को स्टोर करने के लिए कॉल किया जाता है।

यदि कोई सेटर विधि मौजूद नहीं है, तो मान सीधे फ़ील्ड में सेट किया जाएगा। हालाँकि, इस स्थिति में, लक्ष्य प्रॉपर्टी का एक्सेस मॉडिफायर सार्वजनिक होना चाहिए।

पैरामीटर:
InvokeObject - जिस वस्तु पर निष्पादन किया जाना है
फ़ील्डनाम – निष्पादित किए जाने वाले ऑब्जेक्ट का प्रॉपर्टी नाम
अनुशंसित – निर्धारित करने के लिए मान
अपवाद:
अपवाद – निम्नलिखित अपवाद उत्पन्न होता है:
इनवोकेशनटारगेटएक्सेप्शन - जब अंतर्निहित विधि एक अपवाद उत्पन्न करती है
अवैध पहुँच अपवाद – यह मेथड ऑब्जेक्ट जावा का है
यदि भाषा पहुंच नियंत्रण लागू किया गया है और अंतर्निहित विधि तक पहुंच नहीं हो पा रही है
NoSuchMethodException - यदि निर्दिष्ट नाम वाली विधि नहीं मिलती है

गेटप्रॉपर्टी

सार्वजनिक स्थिर वस्तु गेटप्रॉपर्टी(ऑब्जेक्ट invokeObject, स्ट्रिंग fieldName) अपवाद उत्पन्न करता है
invokeObject ऑब्जेक्ट के fieldName के getter मेथड को कॉल करके उसका मान प्राप्त किया जाता है।
यदि कोई गेटर मेथड मौजूद नहीं है, तो मान सीधे फ़ील्ड से प्राप्त किया जाएगा। हालाँकि, इस स्थिति में, लक्ष्य प्रॉपर्टी का एक्सेस मॉडिफायर सार्वजनिक होना चाहिए।

पैरामीटर:
InvokeObject - जिस वस्तु पर निष्पादन किया जाना है
फ़ील्डनाम – निष्पादित किए जाने वाले ऑब्जेक्ट का प्रॉपर्टी नाम
वापसी मान:
गेटर विधि का रिटर्न मान
अपवाद:
अपवाद – निम्नलिखित अपवाद उत्पन्न होता है:
इनवोकेशनटारगेटएक्सेप्शन - जब अंतर्निहित विधि एक अपवाद उत्पन्न करती है
अवैध पहुँच अपवाद – यह मेथड ऑब्जेक्ट जावा का है
यदि भाषा पहुंच नियंत्रण लागू किया गया है और अंतर्निहित विधि तक पहुंच नहीं हो पा रही है
NoSuchFieldException - यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है

आह्वान

सार्वजनिक स्थिर वस्तु आह्वान(ऑब्जेक्ट invokeObject, स्ट्रिंग callMethod, ऑब्जेक्ट[] argObjects) InvocationTargetException, IllegalAccessException, NoSuchMethodException फेंकता है
यह "invokeObject" ऑब्जेक्ट के "callMethod" मेथड को निष्पादित करता है।
यदि कोई रिटर्न वैल्यू है, तो उसे ऑब्जेक्ट के रूप में प्राप्त किया जा सकता है।

पैरामीटर:
InvokeObject - जिस वस्तु पर निष्पादन किया जाना है
कॉलमेथोड – निष्पादित की जाने वाली विधि का नाम
आर्गऑब्जेक्ट्स – यदि आर्गुमेंट हैं, तो उन्हें ऑब्जेक्ट के ऐरे के रूप में पास किया जाता है। यदि कोई आर्गुमेंट नहीं हैं, तो नल पास किया जाता है।
वापसी मान:
"callMethod" को निष्पादित करने का प्रतिफल मान
अपवाद:
इनवोकेशनटारगेटएक्सेप्शन - जब अंतर्निहित विधि एक अपवाद उत्पन्न करती है
अवैध पहुँच अपवाद – यह मेथड ऑब्जेक्ट जावा का है
यदि भाषा पहुंच नियंत्रण लागू किया गया है और अंतर्निहित विधि तक पहुंच नहीं हो पा रही है
NoSuchMethodException - यदि निर्दिष्ट नाम वाली विधि नहीं मिलती है

खोज विधि

सार्वजनिक स्थिर विधि खोज विधि(ऑब्जेक्ट invokeObject, स्ट्रिंग callMethod, ऑब्जेक्ट[] argObjects) NoSuchMethodException फेंकता है
यह "invokeObject" ऑब्जेक्ट के "callMethod" मेथड को खोजता है।

पैरामीटर:
InvokeObject - जिस वस्तु पर निष्पादन किया जाना है
कॉलमेथोड – निष्पादित किए जाने वाले ऑब्जेक्ट की विधि का नाम
आर्गऑब्जेक्ट्स – यदि आर्गुमेंट हैं, तो उन्हें ऑब्जेक्ट के ऐरे के रूप में पास किया जाता है। यदि कोई आर्गुमेंट नहीं हैं, तो नल पास किया जाता है।
वापसी मान:
निर्दिष्ट तर्कों की शर्तों से मेल खाने वाले विधि ऑब्जेक्ट
अपवाद:
NoSuchMethodException - यदि कोई मेल खाने वाली विधि नहीं मिलती है, या यदि नाम "" या "" है

सेटफ़ील्ड

सार्वजनिक स्थैतिक शून्य सेटफ़ील्ड(ऑब्जेक्ट invokeObject, स्ट्रिंग fieldName, ऑब्जेक्ट मान) IllegalAccessException, NoSuchFieldException फेंकता है
"value" नामक मान को निष्पादित किए जाने वाले "invokeObject" ऑब्जेक्ट के "fieldName" नामक फ़ील्ड में संग्रहीत किया जाता है।

पैरामीटर:
InvokeObject - जिस वस्तु पर निष्पादन किया जाना है
फ़ील्डनाम – निष्पादित किए जाने वाले ऑब्जेक्ट का फ़ील्ड नाम
अनुशंसित – निर्धारित करने के लिए मान
अपवाद:
अवैध पहुँच अपवाद – निर्दिष्ट ऑब्जेक्ट बेस फ़ील्ड (या उसका सबक्लास या कार्यान्वयन) है।
यदि यह किसी ऐसे वर्ग या इंटरफ़ेस का उदाहरण नहीं है जो इसे घोषित करता है, या यदि अनरैपिंग रूपांतरण विफल हो जाता है।
NoSuchFieldException - यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है

गेटफील्ड

सार्वजनिक स्थिर वस्तु गेटफील्ड(ऑब्जेक्ट invokeObject, स्ट्रिंग fieldName) IllegalAccessException, NoSuchFieldException फेंकता है
यह निष्पादित किए जा रहे ऑब्जेक्ट "invokeObject" के फ़ील्ड नाम "fieldName" का मान प्राप्त करता है।

पैरामीटर:
InvokeObject - जिस वस्तु पर निष्पादन किया जाना है
फ़ील्डनाम – निष्पादित किए जाने वाले ऑब्जेक्ट का फ़ील्ड नाम
वापसी मान:
वापसी मान
अपवाद:
अवैध पहुँच अपवाद – निर्दिष्ट ऑब्जेक्ट बेस फ़ील्ड (या उसका सबक्लास या कार्यान्वयन) है।
यदि यह किसी ऐसे वर्ग या इंटरफ़ेस का उदाहरण नहीं है जो इसे घोषित करता है, या यदि अनरैपिंग रूपांतरण विफल हो जाता है।
NoSuchFieldException - यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है

हैज़फ़ील्ड

सार्वजनिक स्थिर बूलियन हैज़फ़ील्ड(ऑब्जेक्ट ऑब्जेक्ट, स्ट्रिंग फ़ील्डनाम) अपवाद उत्पन्न करता है
यह जांच करता है कि क्या "ऑब्जेक्ट" नामक ऑब्जेक्ट ने "फील्डनेम" नामक फ़ील्ड घोषित किया है।

पैरामीटर:
वस्तु - निरीक्षण की जाने वाली वस्तु
फ़ील्डनाम निरीक्षण किए जाने वाले क्षेत्र का नाम
वापसी मान:
यदि घोषित किया गया है, तो सत्य
अपवाद:
अपवाद

सभी फ़ील्ड प्राप्त करें

सार्वजनिक स्थिर जावा.यूटिल.ट्रीसेट सभी फ़ील्ड प्राप्त करें(ऑब्जेक्ट ऑब्जेक्ट) अपवाद फेंकता है
पैरामीटर:
वस्तु
वापसी मान:
अपवाद:
अपवाद

getShortClassName

सार्वजनिक स्थिर स्ट्रिंग getShortClassName(वस्तु वस्तु)
यह किसी ऑब्जेक्ट से अयोग्य क्लास नाम को पुनर्प्राप्त करता है।

पैरामीटर:
वस्तु
वापसी मान:

getShortClassName

सार्वजनिक स्थिर स्ट्रिंग getShortClassName(स्ट्रिंग क्लासनेम)
यह पूर्ण रूप से योग्य नाम से क्लास का नाम प्राप्त करता है।

पैरामीटर:
क्लासनेम
वापसी मान:

GETFieldName

सार्वजनिक स्थिर स्ट्रिंग GETFieldName(स्ट्रिंग विधि का नाम)
फ़ील्ड का नाम मेथड के नाम से बदलें। यह जावाबीन्स के नियमों के अनुरूप होना चाहिए।

पैरामीटर:
डेटानाम
वापसी मान:

isClassexist

सार्वजनिक स्थिर बूलियन isClassexist(स्ट्रिंग क्लासनेम)
यह जांच करता है कि पूर्ण रूप से योग्य नाम "className" एक मौजूद क्लास नाम है या नहीं।

पैरामीटर:
क्लासनेम
वापसी मान:

गेटप्रॉपर्टीडिस्क्रिप्टर्स

सार्वजनिक स्थिर प्रॉपर्टीडिस्क्रिप्टर[] गेटप्रॉपर्टीडिस्क्रिप्टर्स(ऑब्जेक्ट ऑब्जेक्ट) इंट्रोस्पेक्शनएक्सेप्शन फेंकता है
यह एक PropertyDescriptor लौटाता है जिसमें "object" के लिए ऑब्जेक्ट जानकारी होती है।

पैरामीटर:
वस्तु
वापसी मान:
अपवाद:
java.beans.IntrospectionException

BeanUtil स्रोत कोड

  • URLをコピーしました!
विषयसूची