मेरे पास एक String
वर्ग का नाम है "Ex"
(कोई .class
विस्तार नहीं )। मैं इसे एक Class
वैरिएबल को सौंपना चाहता हूं , जैसे:
Class cls = (string).class
मैं उसे कैसे कर सकता हूँ?
मेरे पास एक String
वर्ग का नाम है "Ex"
(कोई .class
विस्तार नहीं )। मैं इसे एक Class
वैरिएबल को सौंपना चाहता हूं , जैसे:
Class cls = (string).class
मैं उसे कैसे कर सकता हूँ?
जवाबों:
Class<?> cls = Class.forName(className);
लेकिन आपका className
पूरी तरह से योग्य होना चाहिए - यानीcom.mycompany.MyClass
className
गुजर रहे हैं? क्या आपके वर्गपथ पर ऐसा कोई वर्ग है?
ClassNotFoundException
। ट्राइ-कैच में अपवाद को संभालना था। कुछ इस तरह:try { Class<?> cls = Class.forName("com.company.MyClass"); } catch (ClassNotFoundException ex) { /* do something to handle the case when the string isn't valid and therefor the class can't be found */ }
String clsName = "Ex"; // use fully qualified name
Class cls = Class.forName(clsName);
Object clsInstance = (Object) cls.newInstance();
अधिक जानकारी के लिए http://java.sun.com/docs/books/tutorial/reflect/TOC.html पर प्रतिबिंब पर जावा ट्यूटोरियल ट्रेल की जाँच करें ।
String clsName = "com.mydoamin.className"; Class cls = Class.forName(clsName);
यदि पैरामीटर के रूप में पूरी तरह से योग्य वर्ग नाम हार्डकोड है तो चीजें ठीक काम करती हैं। कोई उपाय?
आप की forName
विधि का उपयोग कर सकते हैं Class
:
Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
String clsName = "com.mydoamin.className"; Class cls = Class.forName(clsName);
यदि पैरामीटर के रूप में पूरी तरह से योग्य वर्ग नाम हार्डकोड है तो चीजें ठीक काम करती हैं। कोई उपाय?
clsName
वैरिएबल में पूरी तरह से योग्य क्लासनाम है तो इसका उपयोग करने और हार्डकोड स्ट्रिंग के बीच कोई अंतर नहीं होना चाहिए। हो सकता है कि आपको क्लास की क्लास की जरूरत न हो। यह आपके स्टार्टअप कोड में एक ही जार से एक सामान्य वर्ग को तुरंत लिखने में मदद कर सकता है ताकि यह सुनिश्चित किया जा सके कि पुस्तकालय लोडर में मौजूद है।
Class.forName()
विधि एक final
चर की उम्मीद करती है। एक साधारण चर काम नहीं करेगा।
जावा रिफ्लेक्शन कॉन्सेप्ट के जरिए रन टाइम के दौरान आप किसी भी क्लास का क्लास रेफरेंस पा सकते हैं।
नीचे दिए गए कोड की जाँच करें। स्पष्टीकरण नीचे दिया गया है
यहां एक उदाहरण दिया गया है जो AClass का उदाहरण बनाने के लिए लौटा हुआ वर्ग उपयोग करता है:
package com.xyzws;
class AClass {
public AClass() {
System.out.println("AClass's Constructor");
}
static {
System.out.println("static block in AClass");
}
}
public class Program {
public static void main(String[] args) {
try {
System.out.println("The first time calls forName:");
Class c = Class.forName("com.xyzws.AClass");
AClass a = (AClass)c.newInstance();
System.out.println("The second time calls forName:");
Class c1 = Class.forName("com.xyzws.AClass");
} catch (ClassNotFoundException e) {
// ...
} catch (InstantiationException e) {
// ...
} catch (IllegalAccessException e) {
// ...
}
}
}
मुद्रित उत्पादन है
The first time calls forName:
static block in AClass
AClass's Constructor
The second time calls forName:
वर्ग पहले ही लोड हो चुका है इसलिए एसीलैस में कोई दूसरा "स्टैटिक ब्लॉक" नहीं है
स्पष्टीकरण नीचे है
Class.ForName को क्लास ऑब्जेक्ट प्राप्त करने के लिए कहा जाता है
क्लास ऑब्जेक्ट का उपयोग करके हम क्लास का नया उदाहरण बना रहे हैं।
इस बारे में कोई संदेह मुझे पता है
यह होना चाहिए:
Class.forName(String classname)
यकीन नहीं है कि आप क्या पूछ रहे हैं, लेकिन ... Class.forname , शायद?