मेन्यू

जावा प्रतिबिंब आसान बना दिया गया

विषयसूची

जावा प्रतिबिंब आसान बना दिया गया

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

प्रतिबिंब क्या है?

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

  • java.lang.क्लास
  • java.lang.reflect.Constructor
  • java.lang.reflect.Method
  • java.lang.reflect.फ़ील्ड

प्रतिबिंबका उपयोग करके, आप सीधे कोड किए बिना कक्षाएं या कॉल विधियां बना सकते हैं।
आप एक स्ट्रिंग से एक क्लास इंस्टेंस बना सकते हैं या एक विधि निष्पादित कर सकते हैं।

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


प्रतिबिम्ब का उद्देश्य

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

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

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

नमूना चल रहा है

कृपया नमूना चलाएं और फ़्रेमवर्क-जैसी प्रोग्रामिंग का अनुभव करें।

यहां हम निम्नलिखित वर्ग का उपयोग करते हैंप्रतिबिंबउपयोगिता का सरल उपयोग प्रदर्शित करता है।

मुख्य.जावा...कक्षा निष्पादित की जानी है
बीनयूटिल.जावा...प्रतिबिंब उपयोगिता वर्ग
फ्रीसॉफ्ट.जावा...एक वर्ग में प्रतिबिंब के रूप में उपयोग किया जाता है जो मुफ्त सॉफ्टवेयर का प्रतिनिधित्व करता है।

●जब सामान्य रूप से निष्पादित किया जाता है

System.out.println(">>> सामान्य मामला");
फ्रीसॉफ्ट फ्रीसॉफ्ट = नया फ्रीसॉफ्ट();
freeSoft.setName("चैट और मैसेंजर चैट और मैसेंजर!!");
freeSoft.showName();
freeSoft.showPrice(0);

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

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

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

निष्पादन परिणाम समान होते हैं चाहे सामान्य मामले में या प्रतिबिंब का उपयोग करते समय।

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

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

मूल्य: 0 येन

>>> प्रतिबिंब का उपयोग करते समय

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

मूल्य: 0 येन

बीनयूटिल विधि विवरण

नया उदाहरण

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

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

नया उदाहरण

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

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

नया उदाहरण

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

पैरामीटर:
clazz - कक्षा
प्रतिलाभ की मात्रा:
क्लैज़ का नया उदाहरण
अपवाद:
अपवाद

नया उदाहरण

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

पैरामीटर:
clazz - कक्षा
argObj - निर्माता तर्क
प्रतिलाभ की मात्रा:
क्लैज़ का नया उदाहरण
अपवाद:
अपवाद

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

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

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

पैरामीटर:
invokeObject - क्रियान्वित की जाने वाली वस्तु
कार्यक्षेत्र नाम - निष्पादित की जाने वाली वस्तु का संपत्ति नाम
कीमत - सेट करने के लिए मान
अपवाद:
अपवाद - निम्नलिखित अपवाद होता है.
आह्वान लक्ष्य अपवाद - यदि अंतर्निहित विधि एक अपवाद फेंकती है
अवैध एक्सेस अपवाद - यह मेथड ऑब्जेक्ट जावा है
जब भाषा पहुंच नियंत्रण लागू किया जाता है और अंतर्निहित विधि तक नहीं पहुंचा जा सकता है
NoSuchMethodException - यदि निर्दिष्ट नाम वाली कोई विधि नहीं मिलती है

संपत्ति प्राप्त करें

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

पैरामीटर:
invokeObject - क्रियान्वित की जाने वाली वस्तु
कार्यक्षेत्र नाम - निष्पादित की जाने वाली वस्तु का संपत्ति नाम
प्रतिलाभ की मात्रा:
गेट्टर विधि वापसी मूल्य
अपवाद:
अपवाद - निम्नलिखित अपवाद होता है.
आह्वान लक्ष्य अपवाद - यदि अंतर्निहित विधि एक अपवाद फेंकती है
अवैध एक्सेस अपवाद - यह मेथड ऑब्जेक्ट जावा है
जब भाषा पहुंच नियंत्रण लागू किया जाता है और अंतर्निहित विधि तक नहीं पहुंचा जा सकता है
NoSuchFieldException - यदि निर्दिष्ट नाम वाला कोई फ़ील्ड नहीं मिलता है

आह्वान

सार्वजनिक स्थैतिक वस्तु आह्वान(ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग कॉलमेथड, ऑब्जेक्ट[] argObjects) इनवोकेशनटार्गेटएक्सेप्शन, इलीगलएक्सेसएक्सेप्शन, नोसचमेथोडएक्सेप्शन फेंकता है
ऑब्जेक्ट "invokeObject" की विधि "callMethod" निष्पादित करता है।
यदि कोई रिटर्न वैल्यू है, तो इसे ऑब्जेक्ट के रूप में प्राप्त किया जा सकता है।

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

विधि खोजें

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

पैरामीटर:
invokeObject - क्रियान्वित की जाने वाली वस्तु
कॉलविधि - निष्पादित किए जाने वाले ऑब्जेक्ट का विधि नाम
argObjects - यदि तर्क हैं, तो उन्हें वस्तुओं की एक श्रृंखला के रूप में पास करें। यदि कोई तर्क नहीं है, तो शून्य पास करें।
प्रतिलाभ की मात्रा:
एक विधि ऑब्जेक्ट जो निर्दिष्ट तर्क शर्तों से मेल खाता है
अपवाद:
NoSuchMethodException - यदि कोई मिलान विधि नहीं मिलती है, या यदि नाम "" या "" है

सेटफ़ील्ड

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

पैरामीटर:
invokeObject - क्रियान्वित की जाने वाली वस्तु
कार्यक्षेत्र नाम - निष्पादित की जाने वाली वस्तु का फ़ील्ड नाम
कीमत - सेट करने के लिए मान
अपवाद:
अवैध एक्सेस अपवाद - वह क्षेत्र जिस पर निर्दिष्ट वस्तु आधारित है (या उसका उपवर्ग या कार्यान्वयनकर्ता)
यह घोषित किए गए वर्ग या इंटरफ़ेस का उदाहरण नहीं है, या यदि अनरैपिंग रूपांतरण विफल हो जाता है
NoSuchFieldException - यदि निर्दिष्ट नाम वाला कोई फ़ील्ड नहीं मिलता है

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

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

पैरामीटर:
invokeObject - क्रियान्वित की जाने वाली वस्तु
कार्यक्षेत्र नाम - निष्पादित की जाने वाली वस्तु का फ़ील्ड नाम
प्रतिलाभ की मात्रा:
प्रतिलाभ की मात्रा
अपवाद:
अवैध एक्सेस अपवाद - वह क्षेत्र जिस पर निर्दिष्ट वस्तु आधारित है (या उसका उपवर्ग या कार्यान्वयनकर्ता)
यह घोषित किए गए वर्ग या इंटरफ़ेस का उदाहरण नहीं है, या यदि अनरैपिंग रूपांतरण विफल हो जाता है
NoSuchFieldException - यदि निर्दिष्ट नाम वाला कोई फ़ील्ड नहीं मिलता है

फ़ील्ड है

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

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

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

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

getShortClassName

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

पैरामीटर:
वस्तु
प्रतिलाभ की मात्रा:

getShortClassName

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

पैरामीटर:
कक्षा का नाम
प्रतिलाभ की मात्रा:

फ़ील्डनाम प्राप्त करें

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

पैरामीटर:
विधि का नाम
प्रतिलाभ की मात्रा:

isClassExist

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

पैरामीटर:
कक्षा का नाम
प्रतिलाभ की मात्रा:

getPropertyDescriptors

सार्वजनिक स्थैतिक संपत्ति विवरणक[] getPropertyDescriptors(ऑब्जेक्ट ऑब्जेक्ट) IntrospectionException फेंकता है
एक प्रॉपर्टीडिस्क्रिप्टर लौटाता है जिसमें "ऑब्जेक्ट" के लिए ऑब्जेक्ट जानकारी होती है।

पैरामीटर:
वस्तु
प्रतिलाभ की मात्रा:
अपवाद:
java.beans.IntrospectionException

बीनयूटिल स्रोत कोड

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