दिलचस्प पोस्ट
मैं स्ट्रिंग संसाधन से अलर्ट डीआलाओग में क्लिक करने योग्य हाइपरलिंक्स कैसे प्राप्त करूं? टैबिंडेक्स से एचटीएमएल तत्व की उपेक्षा कैसे करें? आप सी में लिनक्स पर गैर-अवरुद्ध कंसोल I / O कैसे करते हैं? कैसे jquery $ .jax त्रुटि प्रतिक्रिया पाठ पाने के लिए? क्लास अपने सुपर वर्ग के आवश्यक सदस्यों को लागू नहीं करता है जावा: आपको एक फ्लोट शाब्दिक में 'एफ' को निर्दिष्ट करने की आवश्यकता क्यों है? नेस्टेड पायथन डिक्शनरी, कम्प्रसेशन कुंजियां समतल करें IEnumerable <T> के लिए विदेशी मुद्रा के LINQ समकक्ष System.in से उपयोगकर्ता इनपुट को सही तरीके से पढ़ाने के लिए java.util.Scanner का उपयोग कैसे करें और उस पर कार्य करें? क्या सी / सी ++ में एक मानक साइन फंक्शन (सिग्गम, एसजीएन) है? एंड्रॉइड: एक पृष्ठभूमि सेवा को जीवित रखना (प्रक्रिया मृत्यु को रोकना) टाइमस्टैम्प को पीएचपी में समय पहले परिवर्तित करना 1 दिन पहले, 2 दिन पहले … JqGrid को हाइपरलिंक की आवश्यकता है – Jquery के माध्यम से मूल्य पर कब्जा करने की आवश्यकता है SQL सर्वर में, मैं किसी दिए गए तालिका के लिए कैसे एक तालिका तालिका बनाऊं? फेसबुक एसडीके के साथ एक एसडी कार्ड से फेसबुक को अपलोड करना संभव है?

जावा में नाम से एक वर्ग को इन्स्तांत करने का कोई तरीका है?

मैं इस प्रश्न के रूप में देख रहा था: अपने स्ट्रिंग नाम से एक वर्ग को इंस्टाटियेट करता है जो बताता है कि किस प्रकार क्लास का नाम होने पर उसे इन्स्तांत करना है। जावा में ऐसा करने का कोई तरीका है? मेरे पास पैकेज का नाम और वर्ग का नाम होगा और मुझे उस वस्तु को बनाने में सक्षम होने की जरूरत है जो कि विशेष नाम है

वेब के समाधान से एकत्रित समाधान "जावा में नाम से एक वर्ग को इन्स्तांत करने का कोई तरीका है?"

दो तरीके:

विधि 1 – केवल कक्षाओं के लिए कोई ना-आर्ग कन्स्ट्रक्टर नहीं है

यदि आपकी कक्षा में कोई Class.forName() कन्स्ट्रक्टर है, तो आप Class ऑब्जेक्ट Class.forName() का उपयोग कर प्राप्त कर सकते हैं और एक उदाहरण बना सकते हैं (हालांकि सावधान रहें कि इस विधि को अक्सर बुरा माना जाता है क्योंकि यह जावा की जांच की अपवाद को हरा सकता है )।

उदाहरण के लिए:

 Class<?> clazz = Class.forName("java.util.Date"); Object date = clazz.newInstance(); 

विधि 2

एक वैकल्पिक सुरक्षित दृष्टिकोण जो यह भी काम करता है अगर कक्षा में कोई नो-आर्ग कन्स्ट्रक्टर नहीं है, तो अपने कक्षा ऑब्जेक्ट को अपने Constructor ऑब्जेक्ट से प्राप्त करने और इस ऑब्जेक्ट पर एक newInstance() विधि कॉल करने के लिए newInstance() :

 Class<?> clazz = Class.forName("com.foo.MyClass"); Constructor<?> constructor = clazz.getConstructor(String.class, Integer.class); Object instance = constructor.newInstance("stringparam", 42); 

दोनों तरीकों को प्रतिबिंब के रूप में जाना जाता है आपको आम तौर पर ऐसे विभिन्न अपवादों को पकड़ना पड़ेगा जो निम्न में शामिल हैं:

  • JVM आपकी कक्षा को नहीं खोज या लोड नहीं कर सकता
  • जिस श्रेणी को आप इन्स्तांत करने की कोशिश कर रहे हैं, उसके पास सही प्रकार का कन्स्ट्रक्टर नहीं है
  • निर्माता ने स्वयं एक अपवाद फेंक दिया
  • वह कन्स्ट्रक्टर जिसे आप आमंत्रित करने का प्रयास कर रहे हैं वह सार्वजनिक नहीं है
  • एक सुरक्षा प्रबंधक स्थापित किया गया है और होने से प्रतिबिंब को रोका जा रहा है
 MyClass myInstance = (MyClass) Class.forName("MyClass").newInstance(); 

class.forName ("वर्ग का स्ट्रिंग नाम") का उपयोग करें। newInstance ();

 Class.forName("A").newInstance(); 

इससे क्लास का नाम आरम्भ किया जाएगा।

Class.forName(...) का प्रयोग करके एक उदाहरण बनाने के लिए क्लास का पूर्ण रूप से योग्य नाम प्राप्त करना आसान बनाने के लिए, कोई क्लास Class.getName() विधि का उपयोग कर सकता है। कुछ इस तरह:

 class ObjectMaker { // Constructor, fields, initialization, etc... public Object makeObject(Class<?> clazz) { Object o = null; try { o = Class.forName(clazz.getName()).newInstance(); } catch (ClassNotFoundException e) { // There may be other exceptions to throw here, // but I'm writing this from memory. e.printStackTrace(); } return o; } } 

फिर आप उस ऑब्जेक्ट को निकाल सकते हैं जिसे आप ऑब्जेक्ट makeObject(...) लिए जो कुछ भी पास करते हैं उसे वापस प्राप्त कर सकते हैं:

 Data d = (Data) objectMaker.makeObject(Data.class); 

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

नए ऑब्जेक्ट का निर्माण कंस्ट्रक्शर्स के लिए विधि आवंटन के बराबर नहीं है, क्योंकि एक कन्स्ट्रक्टर की शुरुआत करना एक नया ऑब्जेक्ट बनाने के बराबर है (सबसे सटीक होना, एक नई ऑब्जेक्ट बनाने में स्मृति आवंटन और ऑब्जेक्ट दोनों करना शामिल है)। तो पिछले उदाहरण के निकटतम समतुल्य यह है कि:

 import java.lang.reflect.*; public class constructor2 { public constructor2() { } public constructor2(int a, int b) { System.out.println( "a = " + a + " b = " + b); } public static void main(String args[]) { try { Class cls = Class.forName("constructor2"); Class partypes[] = new Class[2]; partypes[0] = Integer.TYPE; partypes[1] = Integer.TYPE; Constructor ct = cls.getConstructor(partypes); Object arglist[] = new Object[2]; arglist[0] = new Integer(37); arglist[1] = new Integer(47); Object retobj = ct.newInstance(arglist); } catch (Throwable e) { System.err.println(e); } } } 

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

Class.forName ("ClassName") आपके उद्देश्य को हल करेगा।

 Class class1 = Class.forName(ClassName); Object object1 = class1.newInstance(); 
 String str = (String)Class.forName("java.lang.String").newInstance(); 

ऐसा कुछ काम करना चाहिए …

 String name = "Test2";//Name of the class Class myClass = Class.forName(name); Object o = myClass.newInstance();