जावा रिफ्लेक्शन आसान है
जावाのप्रतिबिंबयह अनुभाग उन यूटिलिटी क्लासों का परिचय देता है जो एपीआई का उपयोग करना आसान बनाती हैं।
परावर्तन क्या है?
प्रतिबिंब एपीआईदाँत,"जावा.लैंग.रिफ्लेक्टयह पैकेज में शामिल है।
यह एपीआई जावा क्लास से फ़ील्ड और मेथड जैसी जानकारी प्राप्त करता है।
हम मुख्य रूप से निम्नलिखित कक्षाओं का उपयोग करेंगे।
- जावा.लैंग.क्लास
- जावा.लैंग.रिफ्लेक्ट.कंस्ट्रक्टर
- जावा.लैंग.रिफ्लेक्ट.मेथड
- जावा.लैंग.रिफ्लेक्ट.फील्ड
प्रतिबिंबइस विधि का उपयोग करके, आप सीधे क्लास निर्माण और मेथड कॉल को कोड करने से बच सकते हैं।
आप स्ट्रिंग से क्लास इंस्टेंस बना सकते हैं और मेथड को एक्जीक्यूट कर सकते हैं।
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 स्रोत कोड
/**
* एक यूटिलिटी क्लास जो जावा के रिफ्लेक्शन एपीआई का उपयोग करना आसान बनाती है।
*/
सार्वजनिक वर्ग बीनयूटिल {
/** */
निजी स्थैतिक अंतिम स्ट्रिंग GET = “GET”;
/** */
निजी स्थैतिक अंतिम स्ट्रिंग सेट = “सेट”;
// ———————————————————-『नयाइंस्टेंस』
/**
* "className" स्ट्रिंग से एक इंस्टेंस बनाता है और उसे वापस करता है।
* @param className पूर्ण रूप से योग्य कक्षा का नाम
* @return पूर्ण रूप से योग्य क्लास नाम का एक नया इंस्टेंस
* @थ्रो एक्सेप्शन
*/
पब्लिक स्टैटिक ऑब्जेक्ट न्यू इंस्टेंस (स्ट्रिंग क्लासनेम) एक्सेप्शन फेंकता है {
कोशिश {
क्लास.forName(क्लासनाम).newInstance() लौटाएँ;
कैच (NoClassDefFoundError e) {
System.err.println(“NoClassDefFoundError : ” + className);
तीन ई;
}
}
/**
* "className" स्ट्रिंग से एक इंस्टेंस बनाता है और उसे वापस करता है।
* @param className पूर्ण रूप से योग्य कक्षा का नाम
* @param argObj कंस्ट्रक्टर तर्क
* @return पूर्ण रूप से योग्य क्लास नाम का एक नया इंस्टेंस
* @थ्रो एक्सेप्शन
*/
पब्लिक स्टैटिक ऑब्जेक्ट न्यू इंस्टेंस (स्ट्रिंग क्लासनेम, ऑब्जेक्ट[] आर्गऑब्जेक्ट)
अपवाद फेंकता है {
Class[] argClass = new Class[argObj.length];
for (int i = 0; i < argObj.length; i++) {
argClass[i] = argObj[i].getClass();
}
कंस्ट्रक्टर c = क्लास.forName(क्लासनाम).getConstructor(argClass);
c.newInstance(argObj) लौटाएँ;
}
/**
* "clazz" क्लास से एक इंस्टेंस बनाता है और उसे वापस करता है।
* @param clazz क्लास
* @return Sunazz का एक नया इंस्टेंस
* @थ्रो एक्सेप्शन
*/
पब्लिक स्टैटिक ऑब्जेक्ट न्यू इंस्टेंस (क्लास क्लैज़) एक्सेप्शन फेंकता है {
रिटर्न क्लैज़.न्यूइंस्टेंस();
}
/**
* "clazz" क्लास से एक इंस्टेंस बनाता है और उसे वापस करता है।
* @param clazz क्लास
* @param argObj कंस्ट्रक्टर तर्क
* @return Sunazz का एक नया इंस्टेंस
* @थ्रो एक्सेप्शन
*/
पब्लिक स्टैटिक ऑब्जेक्ट न्यू इंस्टेंस (क्लास क्लैज़, ऑब्जेक्ट[] आर्गऑब्जेक्ट)
अपवाद फेंकता है {
Class[] argClass = new Class[argObj.length];
for (int i = 0; i < argObj.length; i++) {
argClass[i] = argObj[i].getClass();
}
कंस्ट्रक्टर c = clazz.getConstructor(argClass);
c.newInstance(argObj) लौटाएँ;
}
// ---------------------"तरीका"
/**
* ऑब्जेक्ट "invokeObject" के फ़ील्ड "fieldName" का सेटर मेथड
* "value" नामक मान को कॉल करता है और संग्रहीत करता है।
* <br>
* यदि कोई सेटर विधि नहीं है, तो मान सीधे फ़ील्ड में सेट किया जाएगा।
* हालांकि, इस मामले में, विचाराधीन प्रॉपर्टी का एक्सेस मॉडिफायर पब्लिक होना चाहिए।
* @param invokeObject वह ऑब्जेक्ट जिस पर निष्पादन करना है
* @param fieldName उस ऑब्जेक्ट की प्रॉपर्टी का नाम जिस पर निष्पादन किया जाना है।
* @param मान सेट करने के लिए मान
* @throws Exception निम्नलिखित अपवाद उत्पन्न होगा:
* अंतर्निहित विधि द्वारा अपवाद उत्पन्न होने पर @throws InvocationTargetException
* @throws IllegalAccessException यह मेथड ऑब्जेक्ट जावा है
* यदि भाषा अभिगम नियंत्रण लागू किया गया है और अंतर्निहित विधि तक पहुंच नहीं हो पा रही है।
* @throws NoSuchMethodException यदि निर्दिष्ट नाम वाली विधि नहीं मिलती है।
*/
पब्लिक स्टैटिक वॉइड सेटप्रॉपर्टी(ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग फील्डनेम,
ऑब्जेक्ट मान) अपवाद फेंकता है {
कोशिश {
मेथड मेथड = सर्चमेथड (इनवोकऑब्जेक्ट, फील्डनेम, सेट);
क्लास[] पैरामीटरक्लासेस = विधि.गेटपैरामीटरटाइप्स();
ऑब्जेक्ट[] वैल्यूएरे = null;
यदि (paramClasses[0].isInstance(value)) {
// यदि सेट की जा रही वस्तु तर्क वर्ग का उपवर्ग है, तो इसे परिवर्तित नहीं किया जाएगा।
वैल्यू ऐरे = नया ऑब्जेक्ट[] { वैल्यू };
अन्य {
valueArray = new Object[] { convObject(value, paramClasses[0]
.getName()) };
}
method.invoke(invokeObject, valueArray);
कैच (नोसचमेथडएक्सेप्शन ई)
कोशिश {
// यदि कोई सेटर विधि नहीं है, तो इसे सीधे फ़ील्ड पर सेट करें।
setField(invokeObject, fieldName, value);
कैच (नोसचफील्डएक्सेप्शन fe) {
String errorMes = “\nClass” + getShortClassName(invokeObject)
+ “यह फ़ील्ड `` + फ़ील्डनाम + ``''\n के लिए है”
+ "कोई सुलभ सेटर विधियाँ नहीं हैं, और।"“
+ “फ़ील्ड「” + फ़ील्डनाम
" + "" भी सार्वजनिक नहीं है।;
throw new IllegalAccessException(errorMes);
}
}
}
/**
invokeObject ऑब्जेक्ट के fieldName का गेटर मेथड
* कॉल वैल्यू प्राप्त करता है। <br>
* यदि कोई गेटर विधि नहीं है, तो मान सीधे फ़ील्ड से प्राप्त किया जाएगा।
* हालांकि, इस मामले में, विचाराधीन प्रॉपर्टी का एक्सेस मॉडिफायर पब्लिक होना चाहिए।
* @param invokeObject वह ऑब्जेक्ट जिस पर निष्पादन करना है
* @param fieldName उस ऑब्जेक्ट की प्रॉपर्टी का नाम जिस पर निष्पादन किया जाना है।
* @return गेटर विधि का रिटर्न मान
* @throws Exception निम्नलिखित अपवाद उत्पन्न होगा:
* अंतर्निहित विधि द्वारा अपवाद उत्पन्न होने पर @throws InvocationTargetException
* @throws IllegalAccessException यह मेथड ऑब्जेक्ट जावा है
* यदि भाषा अभिगम नियंत्रण लागू किया गया है और अंतर्निहित विधि तक पहुंच नहीं हो पा रही है।
* @throws NoSuchFieldException यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है।
*/
पब्लिक स्टैटिक ऑब्जेक्ट गेटप्रॉपर्टी(ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग फील्डनेम)
अपवाद फेंकता है {
कोशिश {
मेथड मेथड = सर्चमेथड (इनवोकऑब्जेक्ट, फील्डनेम, गेट);
विधि.इनवोक (इनवोक ऑब्जेक्ट, नल) लौटाएँ;
कैच (नोसचमेथडएक्सेप्शन ई)
return getField(invokeObject, fieldName);
}
}
/**
* ऑब्जेक्ट "invokeObject" के "callMethod" मेथड को निष्पादित करता है।
* यदि कोई रिटर्न वैल्यू है, तो उसे ऑब्जेक्ट के रूप में प्राप्त किया जा सकता है।
* @param invokeObject वह ऑब्जेक्ट जिस पर निष्पादन करना है
* @param callMethod निष्पादित की जाने वाली विधि का नाम
* @param argObjects यदि कोई तर्क हैं, तो उन्हें ऑब्जेक्ट के एक सरणी के रूप में पास करें।
* यदि कोई तर्क प्रदान नहीं किया जाता है, तो null मान पास किया जाएगा।
* @return "callMethod" को निष्पादित करने का प्रतिफल मान
* अंतर्निहित विधि द्वारा अपवाद उत्पन्न होने पर @throws InvocationTargetException
* @throws IllegalAccessException यह मेथड ऑब्जेक्ट जावा है
* यदि भाषा अभिगम नियंत्रण लागू किया गया है और अंतर्निहित विधि तक पहुंच नहीं हो पा रही है।
* @throws NoSuchMethodException यदि निर्दिष्ट नाम वाली विधि नहीं मिलती है।
*/
पब्लिक स्टैटिक ऑब्जेक्ट इनवोक (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग कॉलमेथड,
ऑब्जेक्ट[] argObjects) इनवोकेशनटारगेटएक्सेप्शन फेंकता है,
अवैध एक्सेस अपवाद, ऐसी कोई विधि अपवाद नहीं {
मेथड मेथड = फाइंडमेथड(इनवोकऑब्जेक्ट, कॉलमेथड, आर्गऑब्जेक्ट्स);
विधि.इनवोक(इनवोकऑब्जेक्ट, आर्गऑब्जेक्ट्स) लौटाएँ;
}
/**
* ऑब्जेक्ट "invokeObject" के "callMethod" मेथड की खोज करता है।
* @param invokeObject वह ऑब्जेक्ट जिस पर निष्पादन करना है
* @param callMethod निष्पादित की जाने वाली वस्तु की विधि का नाम
* @param argObjects यदि कोई तर्क हैं, तो उन्हें ऑब्जेक्ट के एक सरणी के रूप में पास करें।
* यदि कोई तर्क प्रदान नहीं किया जाता है, तो null मान पास किया जाएगा।
* @return एक मेथड ऑब्जेक्ट जो निर्दिष्ट तर्क की शर्तों से मेल खाता है।
* @throws NoSuchMethodException यदि कोई मेल खाने वाला मेथड नहीं मिलता है।
* या नाम है “ " या " "के मामले में
*/
पब्लिक स्टैटिक मेथड फाइंडमेथड (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग कॉलमेथड,
ऑब्जेक्ट[] argObjects) थ्रो NoSuchMethodException {
क्लास[] पैरामीटरक्लासेस = null;
Method[] methods = invokeObject.getClass().getMethods();
top: for (int i = 0; i < methods.length; i++) {
यदि (methods[i].getName().equals(callMethod)) {
यदि (argObjects == null)
&& methods[i].getParameterTypes().length == 0) {
विधियाँ[i] लौटाएँ;
}
यदि (argObjects == null) {
जारी रखना;
}
paramClasses = methods[i].getParameterTypes();
if (paramClasses.length == argObjects.length) {
// सभी पैरामीटर सूचियों और तर्कों के प्रकारों को मान्य करें।
for (int j = 0; j < paramClasses.length; j++) {
क्लास paramClass = paramClasses[j];
ऑब्जेक्ट argObj = argObjects[j];
// यदि तर्क प्रकार आदिम है, तो तर्क वस्तु
// यह null नहीं है बल्कि एक प्रिमिटिव है
// या फिर, Number का कोई भी उपवर्ग स्वीकार्य है।
यदि (argObj == null) {
जारी रखना;
}
यदि (paramClass.isPrimitive()
&& (argObj instanceof Number || argObj
.getClass().isPrimitive())) {
जारी रखना;
}
यदि (!paramClass.isInstance(argObj)) {
// यदि प्रकारों के बीच कोई अंतर्निहित रूपांतरण संगतता नहीं है, तो अगली विधि पर आगे बढ़ें।
शीर्ष पर जारी रखें;
}
}
विधियाँ[i] लौटाएँ;
}
}
}
स्ट्रिंग paramLength = (paramClasses != null) ? पूर्णांक
.toString(paramClasses.length) : “”;
स्ट्रिंग errorMes = getShortClassName(invokeObject) + "मेथड"“
+ callMethod + “はありません。” + “[ paramClasses.length ] = ”
+ paramLength + “,[ argObjects.length ] = ” + argObjects.length
+ “”;
throw new NoSuchMethodException(errorMes);
}
// ----------------------"मैदान"
/**
* निष्पादित किए जाने वाले ऑब्जेक्ट "invokeObject" के फ़ील्ड नाम "fieldName" का मान सेट किया गया है।
* मान को संग्रहीत करता है।
* @param invokeObject वह ऑब्जेक्ट जिस पर निष्पादन करना है
* @param fieldName उस ऑब्जेक्ट का फ़ील्ड नाम जिस पर निष्पादन किया जाना है।
* @param मान सेट करने के लिए मान
* @throws IllegalAccessException निर्दिष्ट ऑब्जेक्ट इस पर आधारित है
* एक फ़ील्ड (या उसका उपवर्ग या कार्यान्वयन)
* यदि यह किसी क्लास या इंटरफ़ेस का इंस्टेंस नहीं है जो घोषित करता है *
* या यदि अनरैपिंग रूपांतरण विफल हो जाता है
* @throws NoSuchFieldException यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है।
*/
पब्लिक स्टैटिक वॉइड सेटफील्ड (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग फील्डनेम,
ऑब्जेक्ट मान) अवैध एक्सेस अपवाद, नोसचफील्ड अपवाद फेंकता है {
फ़ील्ड फ़ील्ड = सर्चफ़ील्ड(इनवोकऑब्जेक्ट, फ़ील्डनाम);
स्ट्रिंग क्लासनेम = फ़ील्ड.गेटटाइप().गेटनेम();
ऑब्जेक्ट convObj = null;
यदि (field.getType().isInstance(value)) {
convObj = मान;
अन्य {
convObj = convObject(value, className);
}
फ़ील्ड.सेट(इनवोकऑब्जेक्ट, कन्वोऑब्जेक्ट);
}
/**
* निष्पादित किए जाने वाले ऑब्जेक्ट "invokeObject" के फ़ील्ड नाम "fieldName" का मान
इसे पुनः प्राप्त करें।
* @param invokeObject वह ऑब्जेक्ट जिस पर निष्पादन करना है
* @param fieldName उस ऑब्जेक्ट का फ़ील्ड नाम जिस पर निष्पादन किया जाना है।
* @return वापसी मान
* @throws IllegalAccessException निर्दिष्ट ऑब्जेक्ट इस पर आधारित है
* एक फ़ील्ड (या उसका उपवर्ग या कार्यान्वयन)
* यदि यह किसी क्लास या इंटरफ़ेस का इंस्टेंस नहीं है जो घोषित करता है *
* या यदि अनरैपिंग रूपांतरण विफल हो जाता है
* @throws NoSuchFieldException यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है।
*/
पब्लिक स्टैटिक ऑब्जेक्ट गेटफील्ड (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग फील्डनेम)
अवैध एक्सेस अपवाद, नोसचफील्ड अपवाद फेंकता है {
फ़ील्ड फ़ील्ड = सर्चफ़ील्ड(इनवोकऑब्जेक्ट, फ़ील्डनाम);
फ़ील्ड.गेट(इनवोकऑब्जेक्ट) लौटाएँ;
}
/**
* क्या ऑब्जेक्ट "object" किसी फ़ील्ड नाम "fieldName" को घोषित करता है?
* में चेक करती हु।
* @param object निरीक्षण की जाने वाली वस्तु
* @param fieldName जांच किए जाने वाले फ़ील्ड का नाम
* यदि @return घोषित किया गया है, तो सत्य
* @थ्रो एक्सेप्शन
*/
पब्लिक स्टैटिक बूलियन हैज़फील्ड(ऑब्जेक्ट ऑब्जेक्ट, स्ट्रिंग फ़ील्डनाम)
अपवाद फेंकता है {
PropertyDescriptor[] props = getPropertyDescriptors(object);
for (int i = 0; i < props.length; i++) {
स्ट्रिंग _फील्डनाम = प्रॉप्स[i].getName();
यदि (fieldName.equals(_fieldName)) {
सत्य लौटाएँ;
}
}
विवरण झूठा है;
}
/**
*
* @param ऑब्जेक्ट
* @वापस करना
* @थ्रो एक्सेप्शन
*/
पब्लिक स्टैटिक ट्रीसेट गेटऑलफील्ड्स (ऑब्जेक्ट ऑब्जेक्ट) एक्सेप्शन फेंकता है {
TreeSet fieldSet = new TreeSet();
// विधि से प्रॉपर्टी का नाम प्राप्त करें
PropertyDescriptor[] props = getPropertyDescriptors(object);
for (int i = 0; i < props.length; i++) {
स्ट्रिंग फ़ील्डनाम = प्रॉप्स[i].getName();
फ़ील्डसेट.add(फ़ील्डनाम);
}
// फ़ील्ड से प्रॉपर्टी का नाम प्राप्त करें
फ़ील्ड[] फ़ील्ड = ऑब्जेक्ट.getClass().getFields();
for (int i = 0; i < fields.length; i++) {
स्ट्रिंग फ़ील्डनाम = फ़ील्ड[i].getName();
यदि (!fieldSet.contains(fieldName)) {
फ़ील्डसेट.add(फ़ील्डनाम);
}
}
फ़ील्डसेट लौटाएँ;
}
/**
*
* @param invokeObject वह ऑब्जेक्ट जिस पर निष्पादन करना है
* @param fieldName उस ऑब्जेक्ट का फ़ील्ड नाम जिस पर निष्पादन किया जाना है।
* @return एक Fielded ऑब्जेक्ट जो निर्दिष्ट तर्क की शर्त से मेल खाता है।
* @throws NoSuchFieldException यदि निर्दिष्ट नाम वाला फ़ील्ड नहीं मिलता है।
*/
निजी स्थैतिक फ़ील्ड सर्चफ़ील्ड (ऑब्जेक्ट इनवोकऑब्जेक्ट, स्ट्रिंग फ़ील्डनाम)
NoSuchFieldException फेंकता है {
कोशिश {
invokeObject.getClass().getField(fieldName) लौटाएँ;
कैच (नोसचफील्डएक्सेप्शन ई)
// यह स्कोप टेबल कॉलम नामों से प्राप्त किया जाता है
फ़ील्डनाम = चेकफ़ील्डनाम(फ़ील्डनाम);
Field[] fields = invokeObject.getClass().getFields();
for (int i = 0; i < fields.length; i++) {
यदि (fields[i].getName().equalsIgnoreCase(fieldName)) {
फ़ील्ड[i] लौटाएँ;
}
}
throw new NoSuchFieldException(fieldName);
}
}
// ----------------------" अन्य "
/**
* किसी ऑब्जेक्ट से अयोग्य क्लास नाम प्राप्त करता है।
* @param ऑब्जेक्ट
* @वापस करना
*/
पब्लिक स्टैटिक स्ट्रिंग गेटशॉर्टक्लासनेम(ऑब्जेक्ट ऑब्जेक्ट) {
यदि (ऑब्जेक्ट == null) {
"शून्य" लौटाएँ;
}
स्ट्रिंग नाम = ऑब्जेक्ट.गेटक्लास().गेटनाम();
नाम प्राप्त करें;
}
/**
* पूर्ण रूप से योग्य नाम से क्लास का नाम प्राप्त करता है।
* @param className
* @वापस करना
*/
पब्लिक स्टैटिक स्ट्रिंग गेटशॉर्टक्लासनेम(स्ट्रिंग क्लासनेम) {
int index = className.lastIndexOf(“.”);
return className.substring(index + 1);
}
/**
* फ़ील्ड का नाम मेथड के नाम से बदलें। यह जावाबीन्स के नियमों के अनुरूप है।
* यह आवश्यक है।
* @param knowledgeName
* @वापस करना
*/
पब्लिक स्टैटिक स्ट्रिंग गेटफील्डनेम(स्ट्रिंग मेथडनेम) {
स्ट्रिंग फ़ील्डनाम = null;
यदि (methodName.startsWith(“is”)) {
fieldName = methodName.substring(2);
अन्य {
fieldName = methodName.substring(3);
}
fieldName = convString(fieldName, 0, “L”);
फ़ील्डनाम लौटाएँ;
}
/**
* यह जांच करता है कि पूर्ण रूप से योग्य नाम "className" एक मौजूद क्लास नाम है या नहीं।
* @param className
* @वापस करना
*/
पब्लिक स्टैटिक बूलियन isClassExist(स्ट्रिंग क्लासनेम) {
कोशिश {
क्लास.फॉरनेम(क्लासनेम);
सत्य लौटाएँ;
} कैच (अपवाद ई) {
विवरण झूठा है;
}
}
private final static Map beanInfoCache = new HashMap();
/**
* यह PropertyDescriptor लौटाता है जिसमें "object" की ऑब्जेक्ट जानकारी होती है।
* @param ऑब्जेक्ट
* @वापस करना
* @throws IntrospectionException
*/
पब्लिक स्टैटिक प्रॉपर्टीडिस्क्रिप्टर[] गेटप्रॉपर्टीडिस्क्रिप्टर्स(ऑब्जेक्ट ऑब्जेक्ट)
इंट्रोस्पेक्शनएक्सेप्शन फेंकता है {
BeanInfo beanInfo = (BeanInfo) beanInfoCache.get(object.getClass());
यदि (बीनइन्फो == null) {
बीनइन्फो = इंट्रोस्पेक्टर.गेटबीनइन्फो(ऑब्जेक्ट.गेटक्लास());
beanInfoCache.put(object.getClass(), beanInfo);
}
// BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass());
beanInfo.getPropertyDescriptors() लौटाएँ;
}
// ————————————————————————–
// ———————————————『निम्नलिखित एक निजी विधि है』
// ————————————————————————–
/**
* आर्गुमेंट fieldName के लिए एक्सेसरी मेथड को PropertyDescriptor के आधार पर खोजा जाता है।
* @param invokeObject वह ऑब्जेक्ट जिस पर निष्पादन करना है
* @param fieldName फ़ील्ड का नाम
* @param type गेटर विधि ⇒ GET गेटर विधि ⇒ SET
* @return एक मेथड ऑब्जेक्ट जो निर्दिष्ट तर्क की शर्तों से मेल खाता है।
* @throws NoSuchMethodException यदि कोई मेल खाने वाला मेथड नहीं मिलता है।
* या नाम है “ " या " "”
* के मामले में
* @throws IntrospectionException
*/
निजी स्थिर विधि searchMethod(Object invokeObject, String fieldName,
स्ट्रिंग प्रकार) NoSuchMethodException, IntrospectionException फेंकता है {
विधि फ़ंक्शन = शून्य;
फ़ील्डनाम = चेकफ़ील्डनाम(फ़ील्डनाम);
PropertyDescriptor[] props = getPropertyDescriptors(invokeObject);
for (int i = 0; i < props.length; i++) {
स्ट्रिंग नाम = प्रॉप्स[i].getName();
यदि (!नाम.इक्वल्सइग्नोरकेस(फील्डनाम)) {
जारी रखना;
}
यदि (type.equals(GET)) {
विधि = प्रॉप्स[i].getReadMethod();
अन्य {
विधि = प्रॉप्स[i].getWriteMethod();
}
यदि (विधि == शून्य) {
जारी रखना;
}
विधि लौटाएँ;
}
// यदि विधि मौजूद नहीं है।
throw new NoSuchMethodException("इस क्लास में कोई मेथड नहीं है।")“
+ “(केस असंवेदनशील):” + type.toLowerCase()
+ convString(fieldName, 0, “U”) + “()”);
}
/**
* यह जांचता है कि आर्गुमेंट fieldName एक कॉलम नाम है या नहीं, और यदि यह एक कॉलम नाम है
मैं इसे वापस परिवर्तित कर दूंगा।
*
* मेल_पता ⇒ मेल_पता ↓ मेल_पता = मेल_पता
* @param fieldName फ़ील्ड का नाम या कॉलम का नाम
* @return फ़ील्ड नाम
*/
निजी स्थैतिक स्ट्रिंग चेकफील्डनाम(स्ट्रिंग फील्डनाम) {
int index = fieldName.indexOf(“_”);
जबकि (सत्य) {
यदि (सूचकांक == -1) {
फ़ील्डनाम लौटाएँ;
}
StringBuffer convcloumn = new StringBuffer(fieldName);
convcloumn.deleteCharAt(index);
fieldName = convcloumn.toString();
index = fieldName.indexOf(“_”);
}
}
/**
* परिवर्तित किए जाने वाले ऑब्जेक्ट को convClassName द्वारा निर्दिष्ट प्रकार में परिवर्तित करता है।
*
* @param object परिवर्तित की जाने वाली वस्तु
* @param convClassName वह क्लास स्ट्रिंग जिसमें टाइप को कन्वर्ट करना है।
* @return परिवर्तित ऑब्जेक्ट
*/
निजी स्थैतिक ऑब्जेक्ट convObject(ऑब्जेक्ट ऑब्जेक्ट, स्ट्रिंग convClassName) {
यदि (ऑब्जेक्ट == null) {
// यदि यह null लौटाता है तो प्रिमिटिव टाइप में परिवर्तित करने पर त्रुटि उत्पन्न होगी।
// इसे 0 के चारों ओर लपेटें।
यदि (convClassName.equals(“int”)) {
नया पूर्णांक लौटाएँ (0);
} else if (convClassName.equals(“long”)) {
नया लॉन्ग (0) लौटाएँ;
अन्य {
शून्य लौटाएँ;
}
}
यदि (ऑब्जेक्ट.गेटक्लास().गेटनाम().इक्वल्स(कन्वक्लासनाम)) {
ऑब्जेक्ट लौटाएँ;
}
// —————————————-『 object instanceof String 』
if (object instanceof String) {
यदि (convClassName.equals(“java.lang.String”)) {
ऑब्जेक्ट लौटाएँ;
} else if (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“long”)) {
स्ट्रिंग str = (स्ट्रिंग) ऑब्जेक्ट;
यदि (isExist(str)) {
// यह तब तक काम नहीं करेगा जब तक आप इसे पहले BigDecimal में परिवर्तित नहीं कर देते।
// 1000.00000
BigDecimal big = new BigDecimal(str);
नया Long(big.longValue()); लौटाएँ;
अन्य {
// यदि str एक शेल लिटरल है, तो प्रारंभिक मान "0" है।
नया लॉन्ग (0) लौटाएँ;
}
} else if (convClassName.equals(“java.sql.Date”)) {
return toSqlDate((String) object);
} else if (convClassName.equals(“java.sql.Timestamp”)) {
दिनांक दिनांक = toSqlDate((स्ट्रिंग) ऑब्जेक्ट);
नया टाइमस्टैम्प लौटाएँ (दिनांक.getTime());
} else if (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
// यदि str एक शेल लिटरल है, तो प्रारंभिक मान "0" है।
स्ट्रिंग str = (स्ट्रिंग) ऑब्जेक्ट;
यदि (isExist(str)) {
BigDecimal big = new BigDecimal(str);
नया पूर्णांक लौटाएँ (big.intValue());
अन्य {
नया पूर्णांक लौटाएँ (0);
}
} else if (convClassName.equals(“boolean”)) {
return Boolean.valueOf(object.toString());
} else if (convClassName.equals(“java.math.BigDecimal”)) {
स्ट्रिंग टेम्प = ((स्ट्रिंग) ऑब्जेक्ट).ट्रिम();
// temp.length() == 0の場合0ではなくnullにするのが無難。
if (temp.length() == 0) {
शून्य लौटाएँ;
अन्य {
नया बिगडेसिमल (टेम्प) लौटाएँ;
}
}
throwNoSupprt(object, convClassName);
}
// ———————————『 object instanceof java.sql.Date 』
else if (object instanceof java.sql.Date) {
यदि (convClassName.equals(“java.lang.String”)) {
return toStringDate((java.sql.Date) object, “yyyy/MM/dd”);
} else if (convClassName.equals(“java.sql.Date”)) {
ऑब्जेक्ट लौटाएँ;
} else if (convClassName.equals(“java.sql.Timestamp”)) {
नया टाइमस्टैम्प लौटाएँ (((दिनांक) ऑब्जेक्ट).getTime());
}
throwNoSupprt(object, convClassName);
}
// ————————————-『 object instanceof Timestamp 』
else if (object instanceof Timestamp) {
लंबा समय = ((टाइमस्टैम्प) ऑब्जेक्ट).getTime();
यदि (convClassName.equals(“java.lang.String”)) {
return toStringDate(time, “yyyy/MM/dd HH:mm:ss”);
} else if (convClassName.equals(“java.sql.Date”)) {
नया जावा.एसक्यूएल.दिनांक (समय) लौटाएँ;
} else if (convClassName.equals(“java.sql.Timestamp”)) {
ऑब्जेक्ट लौटाएँ;
}
throwNoSupprt(object, convClassName);
}
// —————————————-『 object instanceof Integer 』
else if (object instanceof Integer) {
यदि (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
ऑब्जेक्ट लौटाएँ;
} else if (convClassName.equals(“java.lang.String”)) {
return object.toString();
} else if (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“long”)) {
नया लॉन्ग लौटाएँ (((पूर्णांक) ऑब्जेक्ट).लॉन्गवैल्यू());
} else if (convClassName.equals(“java.math.BigDecimal”)) {
नया BigDecimal लौटाएँ(((पूर्णांक) ऑब्जेक्ट).intValue());
}
throwNoSupprt(object, convClassName);
}
// ——————————————『 object instanceof Long 』
else if (object instanceof Long) {
यदि (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“long”)) {
ऑब्जेक्ट लौटाएँ;
} else if (convClassName.equals(“java.lang.String”)) {
return object.toString();
} else if (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
नया पूर्णांक लौटाएँ (((लॉन्ग) ऑब्जेक्ट).इंटवैल्यू());
} else if (convClassName.equals(“java.math.BigDecimal”)) {
नया BigDecimal(((लॉन्ग) ऑब्जेक्ट).longValue()) लौटाएँ;
}
throwNoSupprt(object, convClassName);
}
// —————————————-『 object instanceof Double 』
else if (object instanceof Double) {
यदि (convClassName.equals(“java.lang.String”)) {
// कॉलम संख्या(8,0)
// विंडोज़ ओरेकल > बिगडेसिमल
// यूनिक्स ओरेकल > डबल
BigDecimal big = new BigDecimal(((Double) object).doubleValue());
int scale = big.scale();
यदि (स्केल == 0) {
return big.toString();
अन्य {
// यदि आवश्यक हो तो राउंडिंग समर्थित नहीं है।
throwNoSupprt(object, convClassName);
}
}
यदि (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
नया पूर्णांक लौटाएँ (((डबल) ऑब्जेक्ट).इंटवैल्यू());
} else if (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“long”)) {
नया लॉन्ग लौटाएँ (((डबल) ऑब्जेक्ट).लॉन्गवैल्यू());
} else if (convClassName.equals(“java.math.BigDecimal”)) {
नया BigDecimal लौटाएँ(((डबल) ऑब्जेक्ट).डबलवैल्यू());
}
throwNoSupprt(object, convClassName);
}
// ————————————『 object instanceof BigDecimal 』
else if (object instanceof BigDecimal) {
यदि (convClassName.equals(“java.lang.String”)) {
return object.toString();
} else if (convClassName.equals(“java.lang.Long”)
|| convClassName.equals(“long”)) {
नया Long लौटाएँ(((BigDecimal) ऑब्जेक्ट).longValue());
} else if (convClassName.equals(“java.lang.Integer”)
|| convClassName.equals(“int”)) {
नया पूर्णांक लौटाएँ (((बिगडेसिमल) ऑब्जेक्ट).इंटवैल्यू());
}
throwNoSupprt(object, convClassName);
}
// —————————————-『 object instanceof byte[] 』
else if (object instanceof byte[]) {
यदि (convClassName.equals(“java.sql.Blob”)) {
ऑब्जेक्ट लौटाएँ;
}
throwNoSupprt(object, convClassName);
}
// ————————————————『ऑब्जेक्ट बूलियन है』
else if (object instanceof Boolean) {
यदि (convClassName.equals(“boolean”)) {
ऑब्जेक्ट लौटाएँ;
}
throwNoSupprt(object, convClassName);
}
// ———————————————-『ऑब्जेक्ट एक बूलियन[] है』
else if (object instanceof boolean[]) {
यदि (convClassName.equals(“java.lang.String”)) {
बूलियन[] बीएस = (बूलियन[]) ऑब्जेक्ट;
StringBuffer buff = new StringBuffer(“[“);
for (int i = 0; i < bs.length; i++) {
बफ़.अपेंड(बीएस[आई] + ",");
}
buff.deleteCharAt(buff.length() – 1);
बफ़.अपेंड("]");
return buff.toString();
}
throwNoSupprt(object, convClassName);
}
throwNoSupprt(object, convClassName);
शून्य लौटाएँ;
}
/**
* यदि रूपांतरण समर्थित नहीं है तो यह त्रुटि उत्पन्न होती है।
*
* @param object परिवर्तित की जाने वाली वस्तु
* @param convClassName वह प्रकार जिसमें परिवर्तित करना है
*/
निजी स्थैतिक शून्य throwNoSupprt(Object object, String convClassName) {
String className = (object != null) ? object.getClass().getName()
: "व्यर्थ";
String errorMess = "\nइस ऑब्जेक्ट के लिए टाइप रूपांतरण अभी समर्थित नहीं है।\n"“
+ ” [ ऑब्जेक्ट ] = ” + ऑब्जेक्ट + “,[ ऑब्जेक्ट प्रकार ] = ” + क्लासनेम
+ “,[ कन्वर्टक्लास ] = ” + convClassName + “”;
थ्रो न्यू अनसपोर्टेडऑपरेशनएक्सेप्शन(एररमैस);
}
/**
* स्ट्रिंग [str] में [index] स्थान पर मौजूद अक्षर को अपरकेस या लोअरकेस में परिवर्तित करता है।
* <p>
* @param str मूल्यांकन की जाने वाली स्ट्रिंग
* @param index स्थिति निर्दिष्ट करें
* @param toCase अपरकेस में बदलें ⇒ U | u लोअरकेस में बदलें ⇒ L | l
* @return परिवर्तित स्ट्रिंग
*/
निजी स्थैतिक स्ट्रिंग convString(स्ट्रिंग str, int index, स्ट्रिंग toCase) {
if (str == null || str.trim().length() == 0) {
स्ट्रिंग लौटाएँ;
अन्य {
String temp = str.substring(index, index + 1);
यदि (toCase.equalsIgnoreCase(“u”)) {
टेम्प = टेम्प.टूअपरकेस();
अन्य {
टेम्प = टेम्प.टूलोअरकेस();
}
StringBuffer tempBuffer = new StringBuffer(str);
tempBuffer.replace(index, index + 1, temp);
return tempBuffer.toString();
}
}
/**
* यह सत्यापित करता है कि [मान] एक वैध मान है या नहीं।
*
* @param मान मूल्यांकन की जाने वाली स्ट्रिंग
* @return [true]: यदि null नहीं है और "" नहीं है
*/
निजी स्थैतिक बूलियन isExist(स्ट्रिंग मान) {
if (value != null && value.length() != 0) {
सत्य लौटाएँ;
}
विवरण झूठा है;
}
/**
* निर्दिष्ट प्रारूप में java.util.Date क्लास या उसकी सबक्लास
* इसे स्ट्रिंग में परिवर्तित करता है।
* @param date वह javautil.Date क्लास जिसमें परिवर्तित करना है
* @param पैटर्न प्रारूप निर्दिष्ट करता है
* @returns एक स्वरूपित दिनांक स्ट्रिंग
*/
निजी स्थैतिक स्ट्रिंग toStringDate(Date date, String pattern) {
SimpleDateFormat sdFormat = new SimpleDateFormat(pattern);
sdFormat.format(date) लौटाएँ;
}
निजी स्थैतिक जावा.एसक्यूएल.डेट टूएसक्यूएलडेट(स्ट्रिंग स्ट्रडेट) {
कैलेंडर cal = toCalendar(strDate);
SQLDate(cal) पर वापस लौटें;
}
private static java.sql.Date toSqlDate(Calendar cal) {
लॉन्ग एल = कैल.गेटटाइम().गेटटाइम();
नया जावा.एसक्यूएल.दिनांक(एल) लौटाएँ;
}
/**
* किसी दीर्घकालिक मान को निर्दिष्ट प्रारूप में स्ट्रिंग में परिवर्तित करता है।
* @param time मिलीसेकंड में वर्तमान समय को दर्शाने वाला एक लॉन्ग मान।
* @param पैटर्न प्रारूप निर्दिष्ट करता है
* @returns एक स्वरूपित दिनांक स्ट्रिंग
*/
निजी स्थैतिक स्ट्रिंग 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”
* @param strDate
* @वापस करना
*/
निजी स्थैतिक कैलेंडर टूकैलेंडर (स्ट्रिंग strDate) {
strDate = format(strDate);
Calendar cal = 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(Calendar.HOUR_OF_DAY);
int mm = cal.get(Calendar.MINUTE);
int ss = cal.get(Calendar.SECOND);
int SSS = cal.get(Calendar.MILLISECOND);
कैल.क्लियर();
cal.set(yyyy, MM – 1, dd);
int len = strDate.length();
स्विच (लेन) {
मामला 10:
तोड़ना;
केस 16: // yyyy/MM/dd HH:mm
HH = Integer.parseInt(strDate.substring(11, 13));
mm = Integer.parseInt(strDate.substring(14, 16));
cal.set(Calendar.HOUR_OF_DAY, HH);
कैल.सेट(कैलेंडर.मिनट, मिमी);
तोड़ना;
केस 19: // yyyy/MM/dd HH:mm:ss
HH = Integer.parseInt(strDate.substring(11, 13));
mm = Integer.parseInt(strDate.substring(14, 16));
ss = Integer.parseInt(strDate.substring(17, 19));
cal.set(Calendar.HOUR_OF_DAY, HH);
कैल.सेट(कैलेंडर.मिनट, मिमी);
कैल.सेट(कैलेंडर.सेकंड, एसएस);
तोड़ना;
केस 23: // yyyy/MM/dd HH:mm:ss.SSS
HH = Integer.parseInt(strDate.substring(11, 13));
mm = Integer.parseInt(strDate.substring(14, 16));
ss = Integer.parseInt(strDate.substring(17, 19));
SSS = Integer.parseInt(strDate.substring(20, 23));
cal.set(Calendar.HOUR_OF_DAY, HH);
कैल.सेट(कैलेंडर.मिनट, मिमी);
कैल.सेट(कैलेंडर.सेकंड, एसएस);
कैल.सेट(कैलेंडर.मिलीसेकंड, एसएसएस);
तोड़ना;
गलती करना:
थ्रो न्यू इल्लीगलस्टेटएक्सेप्शन (
“"इस स्ट्रिंग को दिनांक स्ट्रिंग में परिवर्तित नहीं किया जा सकता है:"”
+ strDate);
}
रिटर्न कैल;
}
/**
* कोई भी दिनांक स्ट्रिंग "yyyy/MM/dd" या "yyyy/MM/dd HH:mm:ss" प्रारूप में हो सकती है।
* प्रारूप में परिवर्तित करने का प्रयास किया जा रहा है।
* उदाहरण: 03/1/3 ⇒ 2003/01/03
* @param strDate
* @वापस करना
*/
निजी स्थैतिक स्ट्रिंग प्रारूप (स्ट्रिंग strDate) {
strDate = strDate.trim();
स्ट्रिंग yyyy = null;
स्ट्रिंग एमएम = शून्य;
स्ट्रिंग dd = null;
स्ट्रिंग HH = null;
स्ट्रिंग mm = null;
स्ट्रिंग एसएस = नल;
स्ट्रिंग एसएसएस = शून्य;
// यदि कोई "-" या "/" नहीं है
if (strDate.indexOf(“/”) == -1 && strDate.indexOf(“-“) == -1) {
if (strDate.length() == 8) {
yyyy = strDate.substring(0, 4);
MM = strDate.substring(4, 6);
dd = strDate.substring(6, 8);
yyyy + “/” + MM + “/” + dd लौटाएँ;
अन्य {
yyyy = strDate.substring(0, 4);
MM = strDate.substring(4, 6);
dd = strDate.substring(6, 8);
HH = strDate.substring(9, 11);
mm = strDate.substring(12, 14);
ss = strDate.substring(15, 17);
yyyy + “/” + MM + “/” + dd + ” ” + HH + “:” + mm + “:” लौटाएँ”
+ एसएस;
}
}
StringTokenizer token = new StringTokenizer(strDate, “_/-:. “);
StringBuffer result = new StringBuffer();
for (int i = 0; token.hasMoreTokens(); i++) {
स्ट्रिंग टेम्प = टोकन.नेक्स्टटोकन();
स्विच (i) {
मामला 0:// वर्ष भाग
yyyy = fillString(strDate, temp, “f”, “20”, 4);
परिणाम.अपेंड(yyyy);
तोड़ना;
मामला 1:// महीना भाग
एमएम = fillString(strDate, temp, “f”, “0”, 2);
परिणाम.जोड़ें("/" + एमएम);
तोड़ना;
मामला 2:// दिन का हिस्सा
dd = fillString(strDate, temp, “f”, “0”, 2);
result.append("/" + dd);
तोड़ना;
मामला 3:// समय भाग
HH = fillString(strDate, temp, “f”, “0”, 2);
परिणाम.अपेंड(" " + HH);
तोड़ना;
मामला 4:// भाग
mm = fillString(strDate, temp, “f”, “0”, 2);
परिणाम.जोड़ें(":" + मिमी);
तोड़ना;
मामला 5:// सेकंड के बारे में भाग
ss = fillString(strDate, temp, “f”, “0”, 2);
परिणाम.जोड़ें(":" + एसएस);
तोड़ना;
केस 6:// मिलीसेकंड भाग
एसएसएस = फिलस्ट्रिंग(स्ट्रडेट, टेम्प, “बी”, “0”, 3);
परिणाम.अपेंड("." + एसएसएस);
तोड़ना;
}
}
return result.toString();
}
निजी स्थैतिक स्ट्रिंग फिलस्ट्रिंग (स्ट्रिंग strDate, स्ट्रिंग str,
स्ट्रिंग पोजीशन, स्ट्रिंग ऐडस्ट्र, इंट लेंथ) {
if (str.length() > len) {
String mes = strDate + "इस स्ट्रिंग को दिनांक स्ट्रिंग में परिवर्तित नहीं किया जा सकता है";
throw new IllegalStateException(mes);
}
return fillString(str, position, addStr, len);
}
/**
स्ट्रिंग [str] में जोड़ी जाने वाली स्ट्रिंग को [position] स्थिति पर और फिर [len] पर सेट किया जाता है।
* पूरा भरने तक डालें।
* <p>
* उदाहरण: String ss = StringUtil.fillString(“aaa”,”b”,”0″,7); ss ⇒ “aaa0000”
*
*नोट: fillString() स्ट्रिंग्स को len तक सम्मिलित करता है, जबकि addString() len के बराबर स्ट्रिंग्स सम्मिलित करता है।
*
* @param str लक्ष्य स्ट्रिंग
* @param position पहले डालें ⇒ F/f बाद में डालें ⇒ B/b
* @param addStr सम्मिलित करने के लिए स्ट्रिंग
* @param len जोड़ने के लिए अंकों की संख्या
* @return परिवर्तित स्ट्रिंग। यदि [str] null या खाली लिटरल है, तो [addStr] को [len] में परिवर्तित किया जाएगा।
* शर्त पूरी होने तक किए गए सभी प्रविष्टियों का परिणाम लौटाता है।
*/
निजी स्थैतिक स्ट्रिंग फिलस्ट्रिंग (स्ट्रिंग str, स्ट्रिंग स्थिति,
स्ट्रिंग addStr, int len) {
StringBuffer tempBuffer = null;
यदि (!isExist(str)) {
tempBuffer = new StringBuffer();
for (int i = 0; i < len; i++) {
टेम्पबफर.अपेंड(ऐडस्ट्र);
}
return tempBuffer.toString();
} else if (str.length() != len) {
tempBuffer = new StringBuffer(str);
while (len > tempBuffer.length()) {
यदि (position.equalsIgnoreCase(“f”)) {
टेम्पबफर.इन्सर्ट(0, ऐडस्ट्र);
अन्य {
टेम्पबफर.अपेंड(ऐडस्ट्र);
}
}
return tempBuffer.toString();
}
स्ट्रिंग लौटाएँ;
}
}
