जावा प्रतिबिंब आसान बना दिया गया
जावाकाप्रतिबिंबएक उपयोगिता वर्ग का परिचय जो आपको आसानी से एपीआई का उपयोग करने की अनुमति देता है।
प्रतिबिंब क्या है?
प्रतिबिंब एपीआईदाँत,"java.lang.प्रतिबिंबित"पैकेज में शामिल,
यह एक एपीआई है जो जावा कक्षाओं से फ़ील्ड और विधियों जैसी जानकारी पुनर्प्राप्त करता है।
निम्नलिखित वर्गों का मुख्य रूप से उपयोग किया जाता है।
- java.lang.क्लास
- java.lang.reflect.Constructor
- java.lang.reflect.Method
- java.lang.reflect.फ़ील्ड
प्रतिबिंबका उपयोग करके, आप सीधे कोड किए बिना कक्षाएं या कॉल विधियां बना सकते हैं।
आप एक स्ट्रिंग से एक क्लास इंस्टेंस बना सकते हैं या एक विधि निष्पादित कर सकते हैं।
XML जैसी बाहरी फ़ाइलों में क्लास नामों और विधि नामों की परिभाषाएँ लिखकर, आप रनटाइम के दौरान वातावरण में होने वाले परिवर्तनों के लिए एप्लिकेशन को गतिशील रूप से अनुकूलित कर सकते हैं।
यह अत्यधिक लचीले अनुप्रयोगों के निर्माण के लिए भी एक बहुत प्रभावी एपीआई है।
प्रतिबिम्ब का उद्देश्य
प्रतिबिंबअक्सर उपयोगकर्ताओं द्वारा सीधे उपयोग नहीं किया जाता है,
इसका व्यापक रूप से स्ट्रट्स जैसे वेब अनुप्रयोगों और ओ/आर मैपिंग जैसे फ्रेमवर्क में उपयोग किया जाता है।
उदाहरण के लिए, जब स्वचालित रूप से वेब स्क्रीन इनपुट डेटा को JavaBeans गुणों पर सेट किया जाता है,
इसका उपयोग SQL जारी करते समय किया जाता है जो JavaBeans गुणों के आधार पर स्वचालित रूप से अपडेट होता है।
इसके अलावा, प्लग-इन को गतिशील रूप से लोड करने और पंजीकृत करने जैसे फ़ंक्शन उपलब्ध हैं जो एप्लिकेशन शुरू होने पर कार्यक्षमता बढ़ाते हैं।प्रतिबिंबका उपयोग करके इसे आसानी से प्राप्त किया जा सकता है।
नमूना चल रहा है
कृपया नमूना चलाएं और फ़्रेमवर्क-जैसी प्रोग्रामिंग का अनुभव करें।
यहां हम निम्नलिखित वर्ग का उपयोग करते हैंप्रतिबिंबउपयोगिता का सरल उपयोग प्रदर्शित करता है।
मुख्य.जावा...कक्षा निष्पादित की जानी है
बीनयूटिल.जावा...प्रतिबिंब उपयोगिता वर्ग
फ्रीसॉफ्ट.जावा...एक वर्ग में प्रतिबिंब के रूप में उपयोग किया जाता है जो मुफ्त सॉफ्टवेयर का प्रतिनिधित्व करता है।
●जब सामान्य रूप से निष्पादित किया जाता है
फ्रीसॉफ्ट फ्रीसॉफ्ट = नया फ्रीसॉफ्ट();
freeSoft.setName("चैट और मैसेंजर चैट और मैसेंजर!!");
freeSoft.showName();
freeSoft.showPrice(0);
●जब प्रतिबिंब का उपयोग करके निष्पादित किया जाता है
// फ्रीसॉफ्ट क्लास का एक उदाहरण बनाएं
ऑब्जेक्ट 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
बीनयूटिल स्रोत कोड
/**
* उपयोगिता वर्ग जो आपको जावा के प्रतिबिंब एपीआई का आसानी से उपयोग करने की अनुमति देता है
*/
पब्लिक क्लास बीनयूटिल {
/** */
निजी स्थैतिक अंतिम स्ट्रिंग GET = "प्राप्त करें";
/** */
निजी स्थैतिक अंतिम स्ट्रिंग सेट = "सेट";
// ——————————————————-『newInstance』
/**
* स्ट्रिंग "क्लासनेम" से एक इंस्टेंस जेनरेट और लौटाता है।
* @param className पूरी तरह से योग्य वर्ग का नाम
* @पूरी तरह से योग्य वर्ग नाम का नया उदाहरण लौटाएँ
* @अपवाद फेंकता है
*/
सार्वजनिक स्थैतिक ऑब्जेक्ट न्यूइंस्टेंस (स्ट्रिंग क्लासनाम) अपवाद फेंकता है {
कोशिश {
वापसी Class.forName(className).newInstance();
} पकड़ें (NoClassDefFoundError e) {
System.err.println('NoClassDefFoundError :' + className);
ई फेंको;
}
}
/**
* स्ट्रिंग "क्लासनेम" से एक इंस्टेंस जेनरेट और लौटाता है।
* @param className पूरी तरह से योग्य वर्ग का नाम
* @param argObj कंस्ट्रक्टर तर्क
* @पूरी तरह से योग्य वर्ग नाम का नया उदाहरण लौटाएँ
* @अपवाद फेंकता है
*/
सार्वजनिक स्थैतिक ऑब्जेक्ट newInstance (स्ट्रिंग क्लासनाम, ऑब्जेक्ट [] argObj)
अपवाद फेंकता है {
कक्षा[] argClass = नई कक्षा[argObj.length];
के लिए (int i = 0; i < argObj.length; i++) {
argClass[i] = argObj[i].getClass();
}
कंस्ट्रक्टर c = Class.forName(className).getConstructor(argClass);
वापसी c.newInstance(argObj);
}
/**
* क्लास 'क्लैज़' से एक इंस्टेंस बनाएं और लौटाएं।
* @परम क्लैज़ क्लास
* @क्लैज़ का नया उदाहरण लौटाएँ
* @अपवाद फेंकता है
*/
सार्वजनिक स्थैतिक ऑब्जेक्ट न्यूइंस्टेंस (क्लास क्लैज़) अपवाद फेंकता है {
वापसी clazz.newInstance();
}
/**
* क्लास 'क्लैज़' से एक इंस्टेंस बनाएं और लौटाएं।
* @परम क्लैज़ क्लास
* @param argObj कंस्ट्रक्टर तर्क
* @क्लैज़ का नया उदाहरण लौटाएँ
* @अपवाद फेंकता है
*/
सार्वजनिक स्थैतिक ऑब्जेक्ट न्यू इंस्टेंस (क्लास क्लैज़, ऑब्जेक्ट [] argObj)
अपवाद फेंकता है {
कक्षा[] argClass = नई कक्षा[argObj.length];
के लिए (int i = 0; i < argObj.length; i++) {
argClass[i] = argObj[i].getClass();
}
कंस्ट्रक्टर c = clazz.getConstructor(argClass);
वापसी c.newInstance(argObj);
}
// ---------------------"तरीका"
/**
* ऑब्जेक्ट "invokeObject" के फ़ील्ड "फ़ील्डनाम" की सेटर विधि
* कॉल, स्टोर वैल्यू 'वैल्यू'।
* <br>
* यदि कोई सेटर विधि नहीं है, तो मान को सीधे फ़ील्ड पर सेट करें।
* हालाँकि, इस मामले में, लक्ष्य संपत्ति का एक्सेस संशोधक सार्वजनिक होना चाहिए।
* @param invokeObject ऑब्जेक्ट निष्पादित किया जाना है
* @param fieldName निष्पादित किए जाने वाले ऑब्जेक्ट का प्रॉपर्टी नाम
* @param मान मान सेट करने के लिए
* @अपवाद फेंकता है निम्नलिखित अपवाद होता है।
* यदि अंतर्निहित विधि अपवाद फेंकती है तो @InvocationTargetException फेंकता है
* @IllegalAccessException फेंकता है यदि यह विधि ऑब्जेक्ट जावा है
* जब भाषा पहुंच नियंत्रण लागू किया जाता है और अंतर्निहित विधि तक नहीं पहुंचा जा सकता है
* यदि निर्दिष्ट नाम वाली कोई विधि नहीं मिलती है तो @NoSuchMethodException को फेंक देता है
*/
सार्वजनिक स्थैतिक शून्य सेटप्रॉपर्टी (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग फ़ील्डनाम,
ऑब्जेक्ट मान) अपवाद फेंकता है {
कोशिश {
विधि विधि = searchMethod(invokeObject, fieldName, SET);
कक्षा[] परमक्लासेस = विधि.getParameterTypes();
ऑब्जेक्ट[] वैल्यूएरे = शून्य;
यदि (paramClasses[0].isInstance(value)) {
//यदि सेट किया जाने वाला ऑब्जेक्ट तर्क वर्ग का उपवर्ग है तो कनवर्ट न करें।
वैल्यूअरे = नया ऑब्जेक्ट[] { वैल्यू };
} अन्य {
valueArray = नया ऑब्जेक्ट[] { convObject(मान, पैरामीटरक्लासेस[0]
.getName()) };
}
मेथड.इनवोक(इनवोकऑब्जेक्ट, वैल्यूअरे);
} पकड़ें (NoSuchMethodException e) {
कोशिश {
// यदि कोई सेटर विधि नहीं है, तो इसे सीधे फ़ील्ड पर सेट करें।
सेटफ़ील्ड(इनवोकऑब्जेक्ट, फ़ील्डनाम, मान);
} पकड़ें (NoSuchFieldException fe) {
स्ट्रिंग त्रुटिमेस = "\nक्लास" + getShortClassName(invokeObject)
+ “है” + “फ़ील्ड के लिए” + फ़ील्डनाम + “”\n”
+ "कोई सुलभ सेटर विधि नहीं है, और।"
+ “फ़ील्ड” + फ़ील्डनाम
+ "" भी सार्वजनिक नहीं है। ” + “”;
नया IllegalAccessException(errorMes) फेंकें;
}
}
}
/**
* फ़ील्ड फ़ील्ड का गेटर विधि, ऑब्जेक्ट का नाम invokeObject
* कॉल वैल्यू प्राप्त करें। <br>
* यदि कोई गेटर विधि नहीं है, तो मूल्य सीधे फ़ील्ड से प्राप्त किया जाएगा।
* हालाँकि, इस मामले में, लक्ष्य संपत्ति का एक्सेस संशोधक सार्वजनिक होना चाहिए।
* @param invokeObject ऑब्जेक्ट निष्पादित किया जाना है
* @param fieldName निष्पादित किए जाने वाले ऑब्जेक्ट का प्रॉपर्टी नाम
* @गेटर विधि का रिटर्न रिटर्न मान
* @अपवाद फेंकता है निम्नलिखित अपवाद होता है।
* यदि अंतर्निहित विधि अपवाद फेंकती है तो @InvocationTargetException फेंकता है
* @IllegalAccessException फेंकता है यदि यह विधि ऑब्जेक्ट जावा है
* जब भाषा पहुंच नियंत्रण लागू किया जाता है और अंतर्निहित विधि तक नहीं पहुंचा जा सकता है
* यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है तो @NoSuchFieldException फेंकता है
*/
सार्वजनिक स्थैतिक ऑब्जेक्ट getProperty (ऑब्जेक्ट invokeObject, स्ट्रिंग फ़ील्डनाम)
अपवाद फेंकता है {
कोशिश {
विधि विधि = searchMethod(invokeObject, fieldName, GET);
वापसी विधि.invoke(invokeObject, null);
} पकड़ें (NoSuchMethodException e) {
वापसी getField(invokeObject, fieldName);
}
}
/**
* ऑब्जेक्ट "invokeObject" की विधि "callMethod" निष्पादित करता है।
* यदि कोई रिटर्न वैल्यू है, तो इसे ऑब्जेक्ट प्रकार के रूप में प्राप्त किया जा सकता है।
* @param invokeObject ऑब्जेक्ट निष्पादित किया जाना है
* @param callMethod विधि का नाम निष्पादित किया जाना है
* @param argObjects यदि कोई तर्क है, तो इसे ऑब्जेक्ट की एक सरणी के रूप में पास करें।
* यदि कोई तर्क नहीं है तो शून्य पास करें।
* @return "callMethod" को निष्पादित करने का रिटर्न मान
* यदि अंतर्निहित विधि अपवाद फेंकती है तो @InvocationTargetException फेंकता है
* @IllegalAccessException फेंकता है यदि यह विधि ऑब्जेक्ट जावा है
* जब भाषा पहुंच नियंत्रण लागू किया जाता है और अंतर्निहित विधि तक नहीं पहुंचा जा सकता है
* यदि निर्दिष्ट नाम वाली कोई विधि नहीं मिलती है तो @NoSuchMethodException को फेंक देता है
*/
सार्वजनिक स्थैतिक ऑब्जेक्ट इनवोक (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग कॉल विधि,
ऑब्जेक्ट[] argObjects) इनवोकेशनटार्गेटएक्सेप्शन फेंकता है,
IllegalAccessException, NoSuchMethodException {
विधि विधि = findMethod(invokeObject, callMethod, argObjects);
वापसी विधि.invoke(invokeObject, argObjects);
}
/**
* ऑब्जेक्ट 'invokeObject' की विधि 'callMethod' खोजें।
* @param invokeObject ऑब्जेक्ट निष्पादित किया जाना है
* @param callMethod निष्पादित किए जाने वाले ऑब्जेक्ट का विधि नाम
* @param argObjects यदि कोई तर्क है, तो इसे ऑब्जेक्ट की एक सरणी के रूप में पास करें।
* यदि कोई तर्क नहीं है तो शून्य पास करें।
* @रिटर्न मेथड ऑब्जेक्ट जो निर्दिष्ट तर्क शर्तों से मेल खाता है
* @NoSuchMethodException फेंकता है यदि कोई मिलान विधि नहीं मिलती है,
* या यदि नाम है " " या " "के मामले में
*/
सार्वजनिक स्थैतिक विधि खोज विधि (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग कॉल विधि,
ऑब्जेक्ट[] argObjects) NoSuchMethodException फेंकता है {
कक्षा[] परमक्लासेस = शून्य;
विधि[] विधियाँ = invokeObject.getClass().getMethods();
शीर्ष: के लिए (int i = 0; i <तरीके.लंबाई; i++) {
अगर (तरीके[i].getName().बराबर(callMethod)) {
यदि (argObjects == null
&& तरीके[i].getParameterTypes().length == 0) {
वापसी के तरीके[i];
}
यदि (argObjects == शून्य) {
जारी रखना;
}
पैरामक्लासेस = विधियाँ[i].getParameterTypes();
यदि (paramClasses.length == argObjects.length) {
// सभी पैरामीटर सूची प्रकार और तर्क प्रकार मान्य करें
(int j = 0; j <paramClasses.length; j++) के लिए {
क्लास पैराक्लास = पैराक्लासेस[जे];
ऑब्जेक्ट argObj = argObjects[j];
// यदि तर्क प्रकार आदिम है, तो तर्क वस्तु
// शून्य नहीं है और आदिम है
//यदि यह संख्या का उपवर्ग है, तो यह ठीक है।
अगर (argObj == शून्य) {
जारी रखना;
}
यदि (paramClass.isPrimitive()
&& (argObj इंस्टेंसऑफ़ नंबर || argObj
.getClass().isPrimitive())) {
जारी रखना;
}
अगर (!paramClass.isInstance(argObj)) {
// जब प्रकार अंतर्निहित रूपांतरण के साथ संगत न हों तो अगली विधि पर आगे बढ़ें
शीर्ष जारी रखें;
}
}
वापसी के तरीके[i];
}
}
}
स्ट्रिंग पैरालंबाई = (परमक्लासेस != शून्य) ? पूर्णांक
.toString(paramClasses.length): “”;
स्ट्रिंग त्रुटिमेस = getShortClassName(invokeObject) + "विधि"
+ callMethod + "कोई नहीं है।" + "[paramClasses.length ] = "
+ पैरामीटर लंबाई + ",[ argObjects.length ] = " + argObjects.length
+ “”;
नया NoSuchMethodException(errorMes) फेंकें;
}
// ----------------------"मैदान"
/**
* निष्पादित किए जाने वाले ऑब्जेक्ट "invokeObject" के फ़ील्ड नाम "फ़ील्डनाम" का मान
* "मूल्य" संग्रहीत करता है।
* @param invokeObject ऑब्जेक्ट निष्पादित किया जाना है
* @param fieldName निष्पादित किए जाने वाले ऑब्जेक्ट का फ़ील्ड नाम
* @param मान मान सेट करने के लिए
* @IllegalAccessException फेंकता है यदि निर्दिष्ट ऑब्जेक्ट है
* फ़ील्ड (या इसका उपवर्ग या कार्यान्वयनकर्ता)
* यदि यह किसी वर्ग या इंटरफ़ेस का उदाहरण नहीं है, तो घोषित करें
* या यदि अनरैपिंग रूपांतरण विफल हो जाता है
* यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है तो @NoSuchFieldException फेंकता है
*/
सार्वजनिक स्थैतिक शून्य सेटफ़ील्ड (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग फ़ील्डनाम,
ऑब्जेक्ट वैल्यू) IllegalAccessException, NoSuchFieldException फेंकता है {
फ़ील्ड फ़ील्ड = searchField(invokeObject, fieldName);
स्ट्रिंग क्लासनाम = field.getType().getName();
ऑब्जेक्ट convObj = शून्य;
यदि (field.getType().isInstance(value)) {
convObj = मान;
} अन्य {
convObj = convObject(मान, वर्गनाम);
}
field.set(invokeObject, convObj);
}
/**
* निष्पादन ऑब्जेक्ट "invokeObject" के फ़ील्ड नाम "फ़ील्डनाम" का मान सेट करें
* पाना।
* @param invokeObject ऑब्जेक्ट निष्पादित किया जाना है
* @param fieldName निष्पादित किए जाने वाले ऑब्जेक्ट का फ़ील्ड नाम
* @रिटर्न रिटर्न वैल्यू
* @IllegalAccessException फेंकता है यदि निर्दिष्ट ऑब्जेक्ट है
* फ़ील्ड (या इसका उपवर्ग या कार्यान्वयनकर्ता)
* यदि यह किसी वर्ग या इंटरफ़ेस का उदाहरण नहीं है, तो घोषित करें
* या यदि अनरैपिंग रूपांतरण विफल हो जाता है
* यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है तो @NoSuchFieldException फेंकता है
*/
सार्वजनिक स्थैतिक ऑब्जेक्ट getField (ऑब्जेक्ट invokeObject, स्ट्रिंग फ़ील्डनाम)
IllegalAccessException, NoSuchFieldException फेंकता है {
फ़ील्ड फ़ील्ड = searchField(invokeObject, fieldName);
वापसी फ़ील्ड.get(invokeObject);
}
/**
* जांचें कि क्या ऑब्जेक्ट "ऑब्जेक्ट" फ़ील्ड नाम "फ़ील्डनाम" घोषित करता है
* पुष्टि करना।
* @परम ऑब्जेक्ट निरीक्षण की जाने वाली वस्तु
* @param fieldName निरीक्षण करने के लिए फ़ील्ड नाम
* @घोषित होने पर सत्य वापस लौटें
* @अपवाद फेंकता है
*/
सार्वजनिक स्थैतिक बूलियन हैफ़ील्ड (ऑब्जेक्ट ऑब्जेक्ट, स्ट्रिंग फ़ील्डनाम)
अपवाद फेंकता है {
प्रॉपर्टीडिस्क्रिप्टर[] प्रॉप्स = getPropertyDescriptors(ऑब्जेक्ट);
के लिए (int i = 0; i <props.length; i++) {
स्ट्रिंग _फ़ील्डनाम = प्रॉप्स[i].getName();
यदि (fieldName.equals(_fieldName)) {
सच लौटें;
}
}
विवरण झूठा है;
}
/**
*
* @परम ऑब्जेक्ट
* @वापस करना
* @अपवाद फेंकता है
*/
सार्वजनिक स्थैतिक ट्रीसेट getAllFields (ऑब्जेक्ट ऑब्जेक्ट) अपवाद फेंकता है {
ट्रीसेट फ़ील्डसेट = नया ट्रीसेट();
// विधि से संपत्ति का नाम प्राप्त करें
प्रॉपर्टीडिस्क्रिप्टर[] प्रॉप्स = getPropertyDescriptors(ऑब्जेक्ट);
के लिए (int i = 0; i <props.length; i++) {
स्ट्रिंग फ़ील्डनाम = प्रॉप्स[i].getName();
फ़ील्डसेट.ऐड(फ़ील्डनाम);
}
// फ़ील्ड से संपत्ति का नाम प्राप्त करें
फ़ील्ड[] फ़ील्ड = object.getClass().getFields();
के लिए (int i = 0; i < फ़ील्ड्स.लंबाई; i++) {
स्ट्रिंग फ़ील्डनाम = फ़ील्ड[i].getName();
यदि (!fieldSet.contains(fieldName)) {
फ़ील्डसेट.ऐड(फ़ील्डनाम);
}
}
वापसी फ़ील्डसेट;
}
/**
*
* @param invokeObject ऑब्जेक्ट निष्पादित किया जाना है
* @param fieldName निष्पादित किए जाने वाले ऑब्जेक्ट का फ़ील्ड नाम
* @रिटर्न फ़ाइल ऑब्जेक्ट जो निर्दिष्ट तर्क शर्तों से मेल खाते हैं
* यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है तो @NoSuchFieldException फेंकता है
*/
निजी स्थैतिक फ़ील्ड खोज फ़ील्ड (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग फ़ील्ड नाम)
NoSuchFieldException फेंकता है {
कोशिश {
वापसी invokeObject.getClass().getField(fieldName);
} पकड़ें (NoSuchFieldException e) {
// यह दायरा तालिका कॉलम नाम से प्राप्त किया गया है
फ़ील्डनाम = चेकफ़ील्डनाम(फ़ील्डनाम);
फ़ील्ड[] फ़ील्ड = invokeObject.getClass().getFields();
के लिए (int i = 0; i < फ़ील्ड्स.लंबाई; i++) {
यदि (फ़ील्ड[i].getName().equalsIgnoreCase(fieldName)) {
वापसी फ़ील्ड[i];
}
}
नया NoSuchFieldException(fieldName); फेंकें;
}
}
// ----------------------" अन्य "
/**
* किसी ऑब्जेक्ट से अयोग्य वर्ग का नाम प्राप्त करें।
* @परम ऑब्जेक्ट
* @वापस करना
*/
सार्वजनिक स्थैतिक स्ट्रिंग getShortClassName(ऑब्जेक्ट ऑब्जेक्ट) {
यदि (ऑब्जेक्ट == शून्य) {
वापसी "शून्य";
}
स्ट्रिंग नाम = object.getClass().getName();
वापसी getShortClassName(नाम);
}
/**
* पूर्णतः योग्य नाम से कक्षा का नाम प्राप्त करें।
* @परम क्लासनाम
* @वापस करना
*/
सार्वजनिक स्थैतिक स्ट्रिंग getShortClassName(स्ट्रिंग क्लासनाम) {
int सूचकांक = className.lastIndexOf(“।”);
वापसी className.substring(सूचकांक + 1);
}
/**
* विधि नाम से फ़ील्ड नाम बदलें। JavaBeans सम्मेलनों के अनुरूप है
* ज़रूरी है।
* @परम विधिनाम
* @वापस करना
*/
सार्वजनिक स्थैतिक स्ट्रिंग getFieldName(स्ट्रिंग विधिनाम) {
स्ट्रिंग फ़ील्डनाम = शून्य;
यदि (methodName.startsWith(“is”)) {
फ़ील्डनाम = विधिनाम.सबस्ट्रिंग(2);
} अन्य {
फ़ील्डनाम = विधिनाम.सबस्ट्रिंग(3);
}
फ़ील्डनाम = convString(फ़ील्डनाम, 0, "एल");
वापसी फ़ील्डनाम;
}
/**
* सत्यापित करें कि पूर्णतः योग्य नाम "क्लासनाम" एक मौजूदा क्लास नाम है।
* @परम क्लासनाम
* @वापस करना
*/
सार्वजनिक स्थैतिक बूलियन isClassExist(स्ट्रिंग क्लासनाम) {
कोशिश {
क्लास.फॉरनेम(क्लासनाम);
सच लौटें;
} पकड़ें (अपवाद ई) {
विवरण झूठा है;
}
}
निजी अंतिम स्थैतिक मानचित्र beanInfoCache = नया HashMap();
/**
* एक प्रॉपर्टीडिस्क्रिप्टर लौटाता है जिसमें "ऑब्जेक्ट" के लिए ऑब्जेक्ट जानकारी होती है।
* @परम ऑब्जेक्ट
* @वापस करना
* @आत्मनिरीक्षण अपवाद फेंकता है
*/
सार्वजनिक स्थैतिक संपत्ति डिस्क्रिप्टर [] getPropertyDescriptors (ऑब्जेक्ट ऑब्जेक्ट)
आत्मनिरीक्षण अपवाद फेंकता है {
बीनइन्फो बीनइन्फो = (बीनइन्फो) बीनइन्फो कैश.गेट(ऑब्जेक्ट.गेटक्लास());
अगर (बीनइन्फो == शून्य) {
बीनइन्फो = इंट्रोस्पेक्टर.गेटबीनइन्फो(ऑब्जेक्ट.गेटक्लास());
beanInfoCache.put(object.getClass(), beanInfo);
}
// बीनइन्फो बीनइन्फो = इंट्रोस्पेक्टर.गेटबीनइन्फो(ऑब्जेक्ट.गेटक्लास());
वापसी beanInfo.getPropertyDescriptors();
}
// ————————————————————————–
// ————————————————“निजी विधि नीचे”
// ————————————————————————–
/**
* PropertiesDescriptor के आधार पर तर्क फ़ील्डनाम के लिए एक्सेसर विधि खोजें।
* @param invokeObject ऑब्जेक्ट निष्पादित किया जाना है
* @परम फ़ील्डनाम फ़ील्ड नाम
* @परम प्रकार गेट्टर विधि ⇒ गेट्टर विधि प्राप्त करें ⇒ सेट
* @रिटर्न मेथड ऑब्जेक्ट जो निर्दिष्ट तर्क शर्तों से मेल खाता है
* @NoSuchMethodException फेंकता है यदि कोई मिलान विधि नहीं मिलती है,
* या यदि नाम है " " या " ”
* के मामले में
* @आत्मनिरीक्षण अपवाद फेंकता है
*/
निजी स्थैतिक विधि searchMethod(ऑब्जेक्ट invokeObject, स्ट्रिंग फ़ील्डनाम,
स्ट्रिंग प्रकार) NoSuchMethodException, IntrospectionException फेंकता है {
विधि विधि = शून्य;
फ़ील्डनाम = चेकफ़ील्डनाम(फ़ील्डनाम);
प्रॉपर्टीडिस्क्रिप्टर[] प्रॉप्स = getPropertyDescriptors(invokeObject);
के लिए (int i = 0; i <props.length; i++) {
स्ट्रिंग नाम = प्रॉप्स[i].getName();
यदि (!name.equalsIgnoreCase(fieldName)) {
जारी रखना;
}
यदि (type.equals(GET)) {
विधि = प्रॉप्स[i].getReadMethod();
} अन्य {
विधि = प्रॉप्स[i].getWriteMethod();
}
यदि (विधि == शून्य) {
जारी रखना;
}
वापसी विधि;
}
// यदि विधि मौजूद नहीं है।
नया NoSuchMethodException फेंकें ("कक्षा में कोई विधियाँ नहीं हैं।"
+ "(केस असंवेदनशील।):" + type.toLowerCase()
+ कन्वस्ट्रिंग (फ़ील्डनाम, 0, "यू") + "()");
}
/**
* जाँचता है कि क्या तर्क fieldName एक स्तंभ नाम है; यदि यह एक स्तंभ नाम है,
* वापस कनवर्ट करें।
*
* मेल_एड्रेस ⇒ मेलएड्रेस ↓ मेलएड्रेस = मेलएड्रेस
* @param फ़ील्डनाम फ़ील्ड नाम या कॉलम नाम
* @वापसी फ़ील्ड का नाम
*/
निजी स्थैतिक स्ट्रिंग चेकफ़ील्डनाम(स्ट्रिंग फ़ील्डनाम) {
int सूचकांक = fieldName.indexOf(“_”);
जबकि (सत्य) {
यदि (सूचकांक == -1) {
वापसी फ़ील्डनाम;
}
स्ट्रिंगबफ़र कॉन्वक्लौम्न = नया स्ट्रिंगबफ़र(फ़ील्डनाम);
convcloumn.deleteCharAt(सूचकांक);
फ़ील्डनाम = convcloumn.toString();
सूचकांक = fieldName.indexOf(“_”);
}
}
/**
* कनवर्ट की जाने वाली वस्तु, ऑब्जेक्ट को convClassName के प्रकार में परिवर्तित करता है।
*
* @param ऑब्जेक्ट ऑब्जेक्ट को परिवर्तित किया जाना है
* कन्वर्ट करने के लिए @param convClassName क्लास स्ट्रिंग का प्रकार
* @परिवर्तित वस्तु को लौटाएँ
*/
निजी स्थैतिक ऑब्जेक्ट convObject(ऑब्जेक्ट ऑब्जेक्ट, स्ट्रिंग convClassName) {
यदि (ऑब्जेक्ट == शून्य) {
// आदिम प्रकार में कनवर्ट करते समय शून्य लौटने पर त्रुटि होगी।
// इसे 0 के लिए एक रैपर बनाएं।
यदि (convClassName.equals(“int”)) {
नया पूर्णांक लौटाएं(0);
} अन्यथा यदि (convClassName.equals(“long”)) {
नया लंबा लौटें(0);
} अन्य {
शून्य वापसी;
}
}
यदि (object.getClass().getName().equals(convClassName)) {
वापसी वस्तु;
}
// ————————————————『स्ट्रिंग का ऑब्जेक्ट इंस्टेंस』
यदि (स्ट्रिंग का ऑब्जेक्ट उदाहरण) {
यदि (convClassName.equals(“java.lang.String”)) {
वापसी वस्तु;
} अन्यथा यदि (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“लंबा”)) {
स्ट्रिंग स्ट्र = (स्ट्रिंग) ऑब्जेक्ट;
यदि (isExist(str)) {
// यदि आप इसे एक बार BigDecimal में परिवर्तित नहीं करते हैं तो यह बुरा होगा
// 1000.00000
बिगडेसीमल बड़ा = नया बिगडेसीमल(str);
नया Long(big.longValue()); लौटाएँ;
} अन्य {
// यदि str एक शेल शाब्दिक है, तो प्रारंभिक मान को "0" पर सेट करें
नया लंबा लौटें(0);
}
} अन्यथा यदि (convClassName.equals(“java.sql.Date”)) {
SqlDate((String) ऑब्जेक्ट पर वापस लौटें);
} अन्यथा यदि (convClassName.equals(“java.sql.Timestamp”)) {
दिनांक दिनांक = toSqlDate((स्ट्रिंग) ऑब्जेक्ट);
नया टाइमस्टैम्प लौटाएँ(date.getTime());
} अन्यथा यदि (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
// यदि str एक शेल शाब्दिक है, तो प्रारंभिक मान को "0" पर सेट करें
स्ट्रिंग स्ट्र = (स्ट्रिंग) ऑब्जेक्ट;
यदि (isExist(str)) {
बिगडेसीमल बड़ा = नया बिगडेसीमल(str);
नया पूर्णांक लौटाएं(big.intValue());
} अन्य {
नया पूर्णांक लौटाएं(0);
}
} अन्यथा यदि (convClassName.equals(“बूलियन”)) {
वापसी Boolean.valueOf(object.toString());
} अन्यथा यदि (convClassName.equals(“java.math.BigDecimal”)) {
स्ट्रिंग अस्थायी = ((स्ट्रिंग) ऑब्जेक्ट).ट्रिम();
// यदि temp.length() == 0 है, तो इसे 0 के बजाय शून्य पर सेट करना सुरक्षित है।
यदि (temp.length() == 0) {
शून्य वापसी;
} अन्य {
नया BigDecimal(अस्थायी) लौटाएँ;
}
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// ————————————“ऑब्जेक्ट इंस्टेंसऑफ़ java.sql.Date”
अन्यथा यदि (java.sql.Date का ऑब्जेक्ट इंस्टेंस) {
यदि (convClassName.equals(“java.lang.String”)) {
स्ट्रिंगडेट पर लौटें((java.sql.Date) ऑब्जेक्ट, "yyyy/MM/dd");
} अन्यथा यदि (convClassName.equals(“java.sql.Date”)) {
वापसी वस्तु;
} अन्यथा यदि (convClassName.equals(“java.sql.Timestamp”)) {
नया टाइमस्टैम्प लौटाएं(((दिनांक) ऑब्जेक्ट).getTime());
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// —————————————-『टाइमस्टैम्प का ऑब्जेक्ट उदाहरण』
अन्यथा यदि (टाइमस्टैम्प का ऑब्जेक्ट उदाहरण) {
लंबा समय = ((टाइमस्टैम्प) ऑब्जेक्ट).getTime();
यदि (convClassName.equals(“java.lang.String”)) {
स्ट्रिंगडेट पर लौटें (समय, "yyyy/MM/dd HH:mm:ss");
} अन्यथा यदि (convClassName.equals(“java.sql.Date”)) {
नया java.sql.Date(time) लौटाएँ;
} अन्यथा यदि (convClassName.equals(“java.sql.Timestamp”)) {
वापसी वस्तु;
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// -------- पूर्णांक का वस्तु उदाहरण』
अन्यथा यदि (पूर्णांक का ऑब्जेक्ट उदाहरण) {
यदि (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
वापसी वस्तु;
} अन्यथा यदि (convClassName.equals(“java.lang.String”)) {
वापसी object.toString();
} अन्यथा यदि (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“लंबा”)) {
नया Long(((Integer) object).longValue()); लौटाएँ
} अन्यथा यदि (convClassName.equals(“java.math.BigDecimal”)) {
नया BigDecimal(((पूर्णांक) ऑब्जेक्ट).intValue()); लौटाएँ
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// ——————————————『लॉन्ग का ऑब्जेक्ट इंस्टेंस』
अन्यथा यदि (लंबे समय का ऑब्जेक्ट उदाहरण) {
यदि (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“लंबा”)) {
वापसी वस्तु;
} अन्यथा यदि (convClassName.equals(“java.lang.String”)) {
वापसी object.toString();
} अन्यथा यदि (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
नया पूर्णांक लौटाएं(((लंबा) ऑब्जेक्ट).intValue());
} अन्यथा यदि (convClassName.equals(“java.math.BigDecimal”)) {
नया BigDecimal(((Long) object).longValue()); लौटाएँ
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// ——————————————-『ऑब्जेक्ट इंस्टेंसऑफ़ डबल』
अन्यथा यदि (ऑब्जेक्ट इंस्टेंसऑफ़ डबल) {
यदि (convClassName.equals(“java.lang.String”)) {
// कॉलम नंबर(8,0)
// विंडोज़ ओरेकल > बिगडेसीमल
// यूनिक्स ओरेकल > डबल
बिगडेसीमल बड़ा = नया बिगडेसीमल(((डबल) ऑब्जेक्ट).डबलवैल्यू());
int स्केल = big.scale();
यदि (स्केल == 0) {
वापसी big.toString();
} अन्य {
// यदि राउंडिंग आवश्यक है तो समर्थित नहीं है।
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
}
यदि (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
नया पूर्णांक लौटाएं(((डबल) ऑब्जेक्ट).intValue());
} अन्यथा यदि (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“लंबा”)) {
नया Long(((Double) object).longValue()); लौटाएँ
} अन्यथा यदि (convClassName.equals(“java.math.BigDecimal”)) {
नया BigDecimal(((Double) object).doubleValue()); लौटाएँ
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// —————————————“बिगडेसीमल का ऑब्जेक्ट इंस्टेंस”
अन्यथा यदि (बिगडेसीमल का ऑब्जेक्ट उदाहरण) {
यदि (convClassName.equals(“java.lang.String”)) {
वापसी object.toString();
} अन्यथा यदि (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“लंबा”)) {
नया Long(((BigDecimal) object).longValue()); लौटाएँ
} अन्यथा यदि (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
नया पूर्णांक लौटाएं(((बिगडेसीमल) ऑब्जेक्ट).intValue());
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// ——————————————- बाइट का ऑब्जेक्ट इंस्टेंस[]』
अन्यथा यदि (ऑब्जेक्ट इंस्टेंसऑफ़ बाइट[]) {
यदि (convClassName.equals(“java.sql.Blob”)) {
वापसी वस्तु;
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// —————————————————“वस्तु बूलियन है”
अन्यथा यदि (बूलियन का ऑब्जेक्ट उदाहरण) {
यदि (convClassName.equals(“बूलियन”)) {
वापसी वस्तु;
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
// ———————————————-『ऑब्जेक्ट बूलियन है[]』
अन्यथा यदि (बूलियन का ऑब्जेक्ट इंस्टेंस[]) {
यदि (convClassName.equals(“java.lang.String”)) {
बूलियन[] बीएस = (बूलियन[]) ऑब्जेक्ट;
स्ट्रिंगबफ़र बफ़ = नया स्ट्रिंगबफ़र ("[");
के लिए (int i = 0; i < bs.length; i++) {
buff.append(bs[i] + “,”);
}
buff.deleteCharAt(buff.length() – 1);
buff.append(“]”);
वापसी buff.toString();
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
}
थ्रोनोसुप्रर्ट(ऑब्जेक्ट, कन्वक्लासनाम);
शून्य वापसी;
}
/**
*यदि रूपांतरण समर्थित नहीं है तो फेंक देता है।
*
* @param ऑब्जेक्ट ऑब्जेक्ट को परिवर्तित किया जाना है
* कन्वर्ट करने के लिए @param convClassName टाइप करें
*/
निजी स्थैतिक शून्य थ्रोनोसुप्रर्ट (ऑब्जेक्ट ऑब्जेक्ट, स्ट्रिंग कन्वक्लासनाम) {
स्ट्रिंग क्लासनाम = (ऑब्जेक्ट != शून्य) ? object.getClass().getName()
: "व्यर्थ";
स्ट्रिंग एररमेस = "\nइस ऑब्जेक्ट के लिए प्रकार रूपांतरण प्रसंस्करण अभी तक समर्थित नहीं है।\n"
+ "[ऑब्जेक्ट] =" + ऑब्जेक्ट + ",[ऑब्जेक्ट प्रकार] =" + क्लासनाम
+ ",[ कन्वर्टक्लास ] = " + कन्वक्लासनाम + "";
नया UnsupportedOperationException(errorMess) फेंकें;
}
/**
* स्ट्रिंग [str] की स्थिति [सूचकांक] पर वर्ण को अपरकेस या लोअरकेस में परिवर्तित करता है।
* <p>
* @param str स्ट्रिंग का मूल्यांकन किया जाना है
* @परम सूचकांक निर्दिष्ट स्थिति
* @param toCase को अपर केस में कनवर्ट करें ⇒ U | u लोअर केस में कनवर्ट करें ⇒ L | l
* @रूपांतरण के बाद रिटर्न स्ट्रिंग
*/
निजी स्थैतिक स्ट्रिंग कन्वस्ट्रिंग (स्ट्रिंग स्ट्र, इंट इंडेक्स, स्ट्रिंग टूकेस) {
यदि (str == null || str.trim().length() == 0) {
वापसी str;
} अन्य {
स्ट्रिंग अस्थायी = str.substring(सूचकांक, सूचकांक + 1);
यदि (toCase.equalsIgnoreCase(“u”)) {
अस्थायी = temp.toUpperCase();
} अन्य {
अस्थायी = temp.toLowerCase();
}
स्ट्रिंगबफ़र tempBuffer = नया स्ट्रिंगबफ़र(str);
tempBuffer.replace(सूचकांक, सूचकांक + 1, अस्थायी);
वापसी tempBuffer.toString();
}
}
/**
* सत्यापित करें कि क्या [मान] एक वैध मान है।
*
* @param मान स्ट्रिंग का मूल्यांकन किया जाना है
* @वापसी [सत्य]: यदि शून्य नहीं है और नहीं ""
*/
निजी स्थैतिक बूलियन isExist(स्ट्रिंग मान) {
यदि (मान != शून्य && मान.लंबाई() != 0) {
सच लौटें;
}
विवरण झूठा है;
}
/**
* java.util.Date वर्ग या उसके उपवर्ग निर्दिष्ट प्रारूप में
* स्ट्रिंग में कनवर्ट करें।
* @param दिनांक java.util.Date वर्ग को परिवर्तित किया जाना है
* @परम पैटर्न निर्दिष्ट प्रारूप
* @वापसी स्वरूपित दिनांक स्ट्रिंग
*/
निजी स्थैतिक स्ट्रिंग toStringDate(दिनांक दिनांक, स्ट्रिंग पैटर्न) {
SimpleDateFormat sdFormat = नया SimpleDateFormat(पैटर्न);
वापसी sdFormat.format(दिनांक);
}
निजी स्थैतिक java.sql.Date toSqlDate(String strDate) {
कैलेंडर cal = toCalendar(strDate);
SqlDate(cal) पर वापस लौटें;
}
निजी स्थैतिक java.sql.Date toSqlDate(कैलेंडर कैल) {
लंबा एल = cal.getTime().getTime();
नया java.sql.Date(l) लौटाएँ;
}
/**
* लंबे समय के मान को निर्दिष्ट प्रारूप में एक स्ट्रिंग में परिवर्तित करता है।
* @परम समय वर्तमान समय के मिलीसेकंड का प्रतिनिधित्व करने वाला एक लंबा मान।
* @परम पैटर्न निर्दिष्ट प्रारूप
* @वापसी स्वरूपित दिनांक स्ट्रिंग
*/
निजी स्थैतिक स्ट्रिंग toStringDate(लंबा समय, स्ट्रिंग पैटर्न) {
स्ट्रिंगडेट पर लौटें (नई तिथि (समय), पैटर्न);
}
/**
* स्ट्रिंग ⇒ java.sql.Date
*
* निम्नलिखित दिनांक स्ट्रिंग को java.sql.Date में कनवर्ट करें
* yyyy/MM/dd HH:mm:ss.SSS yyyy-MM-dd HH:mm:ss.SSS
*
* “20030407” “2003/04/07” “2003-04-07” “2003/04/07 15:20:16” “2003-04-07
* 15:20:16”
* @परम स्ट्रडेट
* @वापस करना
*/
निजी स्थैतिक कैलेंडर toCalendar(स्ट्रिंग strDate) {
strDate = प्रारूप(strDate);
कैलेंडर कैल = Calendar.getInstance();
int yyyy = Integer.parseInt(strDate.substring(0, 4));
int MM = Integer.parseInt(strDate.substring(5, 7));
int dd = Integer.parseInt(strDate.substring(8, 10));
int HH = cal.get(कैलेंडर.HOUR_OF_DAY);
int मिमी = cal.get(कैलेंडर.मिनट);
int ss = cal.get(कैलेंडर.सेकंड);
int SSS = cal.get(Calendar.MILLISECOND);
cal.clear();
cal.set(yyyy, MM – 1, dd);
int len = strDate.length();
स्विच (लेन) {
केस 10:
तोड़ना;
केस 16: // yyyy/MM/dd HH:mm
HH = Integer.parseInt(strDate.substring(11, 13));
मिमी = Integer.parseInt(strDate.substring(14, 16));
cal.set(कैलेंडर.HOUR_OF_DAY, HH);
कैल.सेट(कैलेंडर.मिनट, मिमी);
तोड़ना;
केस 19: // yyyy/MM/dd HH:mm:ss
HH = Integer.parseInt(strDate.substring(11, 13));
मिमी = Integer.parseInt(strDate.substring(14, 16));
ss = Integer.parseInt(strDate.substring(17, 19));
cal.set(कैलेंडर.HOUR_OF_DAY, HH);
कैल.सेट(कैलेंडर.मिनट, मिमी);
कैल.सेट(कैलेंडर.सेकंड, एसएस);
तोड़ना;
केस 23: // yyyy/MM/dd HH:mm:ss.SSS
HH = Integer.parseInt(strDate.substring(11, 13));
मिमी = Integer.parseInt(strDate.substring(14, 16));
ss = Integer.parseInt(strDate.substring(17, 19));
एसएसएस = Integer.parseInt(strDate.substring(20, 23));
cal.set(कैलेंडर.HOUR_OF_DAY, HH);
कैल.सेट(कैलेंडर.मिनट, मिमी);
कैल.सेट(कैलेंडर.सेकंड, एसएस);
cal.set(कैलेंडर.MILLISECOND, SSS);
तोड़ना;
गलती करना:
नया IllegalStateException फेंकें(
"इस स्ट्रिंग स्ट्रिंग को दिनांक स्ट्रिंग में परिवर्तित नहीं किया जा सकता है:"
+strDate);
}
वापसी कैल;
}
/**
* कोई भी दिनांक स्ट्रिंग "yyyy/MM/dd" या "yyyy/MM/dd HH:mm:ss"
* प्रारूप में बदलने का प्रयास।
* उदाहरण: 03/1/3 ⇒ 2003/01/03
* @परम स्ट्रडेट
* @वापस करना
*/
निजी स्थैतिक स्ट्रिंग प्रारूप (स्ट्रिंग strDate) {
strDate = strDate.trim();
स्ट्रिंग yyyy = शून्य;
स्ट्रिंग एमएम = शून्य;
स्ट्रिंग डीडी = शून्य;
स्ट्रिंग एचएच = शून्य;
स्ट्रिंग मिमी = शून्य;
स्ट्रिंग एसएस = शून्य;
स्ट्रिंग एसएसएस = शून्य;
// यदि "-" या "/" गायब है
यदि (strDate.indexOf('/') == -1 && strDate.indexOf('-') == -1) {
यदि (strDate.length() == 8) {
yyyy = strDate.substring(0, 4);
एमएम = strDate.substring(4, 6);
dd = strDate.substring(6, 8);
वापसी yyyy + "/" + MM + "/" + dd;
} अन्य {
yyyy = strDate.substring(0, 4);
एमएम = strDate.substring(4, 6);
dd = strDate.substring(6, 8);
एचएच = strDate.substring(9, 11);
मिमी = strDate.substring(12, 14);
एसएस = strDate.substring(15, 17);
वापसी yyyy + "/" + MM + "/" + dd + "" + HH + ":" + mm + ":"
+एसएस;
}
}
स्ट्रिंगटोकनाइज़र टोकन = नया स्ट्रिंगटोकनाइज़र(strDate, “_/-:.”);
स्ट्रिंगबफ़र परिणाम = नया स्ट्रिंगबफ़र();
के लिए (int i = 0; टोकन.hasMoreTokens(); i++) {
स्ट्रिंग अस्थायी = टोकन.नेक्स्टटोकन();
स्विच (i) {
केस 0:// वर्ष भाग
yyyy = fillString(strDate, temp, "f", "20", 4);
परिणाम.जोड़ें(yyyy);
तोड़ना;
केस 1:// माह भाग
एमएम = फिलस्ट्रिंग (strDate, temp, "f", "0", 2);
परिणाम.जोड़ें(“/” + एमएम);
तोड़ना;
केस 2: // दिन का भाग
dd = fillString(strDate, temp, “f”, “0”, 2);
परिणाम.जोड़ें(“/” + dd);
तोड़ना;
केस 3:// समय भाग
एचएच = फिलस्ट्रिंग (strDate, temp, "f", "0", 2);
परिणाम.जोड़ें('' + एचएच);
तोड़ना;
केस 4: // मिनट का भाग
मिमी = fillString(strDate, temp, "f", "0", 2);
परिणाम.जोड़ें(“:” + मिमी);
तोड़ना;
केस 5:// दूसरा भाग
ss = fillString(strDate, temp, "f", "0", 2);
परिणाम.जोड़ें(“:” + ss);
तोड़ना;
केस 6: // मिलीसेकंड भाग
एसएसएस = fillString(strDate, temp, "b", "0", 3);
परिणाम.जोड़ें(“।” + एसएसएस);
तोड़ना;
}
}
वापसी परिणाम.toString();
}
निजी स्थैतिक स्ट्रिंग fillString(स्ट्रिंग strDate, स्ट्रिंग str,
स्ट्रिंग स्थिति, स्ट्रिंग addStr, int len) {
अगर (str.length() > लेन) {
स्ट्रिंग मेस = स्ट्रडेट + "इस स्ट्रिंग स्ट्रिंग को दिनांक स्ट्रिंग में परिवर्तित नहीं किया जा सकता";
नया IllegalStateException(mes) फेंकें;
}
वापसी fillString (str, स्थिति, addStr, लेन);
}
/**
* [len] में [स्थिति] पर स्ट्रिंग [str] में जोड़ने के लिए स्ट्रिंग [addStr] जोड़ें
*पूरा होने तक डालें.
* <p>
* उदाहरण: स्ट्रिंग ss = StringUtil.fillString('aaa','b','0″,7); ss ⇒ 'aaa0000'
*
* * fillString() लेन भरने तक सम्मिलित होता है, लेकिन addString() लेन सम्मिलित करता है।
*
* @param str लक्ष्य स्ट्रिंग
* @परम स्थिति पहले डालें ⇒ एफ/एफ बाद डालें ⇒ बी/बी
* @param addStr स्ट्रिंग डालने के लिए
* @परम लेन पुनः भरने के लिए अंकों की संख्या
* @रूपांतरण के बाद स्ट्रिंग वापस करें। [str] शाब्दिक रूप से शून्य या खाली है, [addStr] को [len] पर सेट किया गया है
* संतुष्ट होने तक डाले गए परिणाम लौटाता है।
*/
निजी स्थैतिक स्ट्रिंग fillString(स्ट्रिंग str, स्ट्रिंग स्थिति,
स्ट्रिंग addStr, int len) {
स्ट्रिंगबफ़र tempBuffer = शून्य;
यदि (!isExist(str)) {
tempBuffer = नया स्ट्रिंगबफ़र();
के लिए (int i = 0; i < len; i++) {
tempBuffer.append(addStr);
}
वापसी tempBuffer.toString();
} अन्यथा यदि (str.length() != len) {
tempBuffer = नया स्ट्रिंगबफ़र(str);
जबकि (लेन > tempBuffer.length()) {
यदि (position.equalsIgnoreCase(“f”)) {
tempBuffer.insert(0, addStr);
} अन्य {
tempBuffer.append(addStr);
}
}
वापसी tempBuffer.toString();
}
वापसी str;
}
}