2012-04-12 16 views
54

अगर मैं अपने आवेदन में परीक्षण गतिविधि नामक एक गतिविधि वर्ग है, वहाँ एक रास्ता इस उदाहरण की तरह इसके नाम से अपनी श्रेणी प्राप्त करने के लिए है:इसके नाम से वर्ग हो रही

Class<?> c = getClassByName("TestActivity"); 
+0

कृपया सही उत्तर का चयन करें और –

उत्तर

112

उपयोग forName बजाय ..

कुछ इस तरह ..

try { 
    Class<?> act = Class.forName("com.bla.TestActivity"); 
} catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
} 
+25

पर पोस्ट बंद करें आपको पूरा पैकेज नाम भी देना होगा। उदाहरण: com.bla.TestActivity क्लास के लिए तर्क के रूप में .forName – Richie

+1

क्या आप 'कक्षा <प्राप्त करने के लिए कुछ भी कर सकते हैं? SomeClass> 'बढ़ाता है? – Gobliins

+0

@Gobliins नहीं - संकलक गारंटी नहीं दे सकता कि आप किस प्रकार की कक्षा प्राप्त करने जा रहे हैं, इसलिए यह आपको कक्षा प्रदान करता है। यदि आप जानते हैं कि आपको किस प्रकार की कक्षा मिल जाएगी, तो आपको इसे डालना होगा (फिर भी, आपको अनचेक कास्ट चेतावनियां मिलती हैं क्योंकि कास्ट सुरक्षित नहीं है)। – Dylanthepiguy

4

Class.forName उस पर अपवाद है लगता है। इस मुद्दे को हल करने के लिए उपर्युक्त पर विस्तार करना है।

try { t = Class.forName("com.package.classname"); } catch (Exception ignored){} 
+0

इस तरह उत्तर देने के लिए SO पर सामान्य तरीका ** ** उनके उत्तर को संपादित करना होगा। यद्यपि जावा में अपवाद बहुत अधिक हैं (और आपका कोड सिर्फ इसे अनदेखा करता है), एक ** टिप्पणी ** इसे संबोधित करने के लिए पर्याप्त होगा। – crazyhatfish

+5

@crazyhatfish - ऐसा लगता है कि पैट्रिक को अपने स्वयं के उत्तर पोस्ट करने में कुछ भी मदद करने के विशेषाधिकार नहीं थे। – amess

+1

@ एमेस व्हाउप्स, आपका अधिकार, मैं भूल जाता हूं टिप्पणियों को प्रतिनिधि की आवश्यकता है। मुझे सही करने के लिए धन्यवाद। – crazyhatfish

0

आप Class::forName का उपयोग अज्ञात प्रकार के एक वर्ग वस्तु प्राप्त करने के लिए कर सकते हैं। आप एक टाइप वर्ग प्राप्त करना चाहते हैं, तो आप वर्ग Class::forName द्वारा दिया पर Class::asSubclass उपयोग कर सकते हैं:

Class<? extends Activity> activityClass = Class.forName("com.example.TestActivity") 
               .asSubclass(Activity.class); 

बेशक आप भी अपवाद के विभिन्न प्रकार के एक झुंड को संभालने के लिए होगा। प्रतिबिंब से निपटने के दौरान सामान्य है।

1

यह आपके प्रश्न के लिए सबसे प्रासंगिक उत्तर नहीं हो सकता है, लेकिन आमतौर पर स्ट्रिंग के रूप में हार्डकोड क्लास नाम अक्षर के लिए यह बुरा है।

Class<?> act = TestActivity.class; 

वाक्यविन्यास का उपयोग करना बेहतर हो सकता है।

संबंधित मुद्दे