2013-04-11 6 views
12

मैं जावा में किसी विधि के पैरामीटर के रूप में कक्षा प्रकार को पास करना चाहता हूं जिसमें से एक ही कन्स्ट्रक्टर पैरामीटर है। और उस विधि में उस क्लास का उदाहरण बनाएं। यह संभव है?पैरामीटर के रूप में गुजरने वाले वर्ग प्रकार और इसके उदाहरण का निर्माण

+0

के लिए एपीआई देखें क्या आप वाकई इसे "करना" चाहते हैं? मैं इसे कभी नहीं करना चाहूंगा। – Dariusz

+0

आपका उपयोग केस क्या है जो इसे मजबूर कर रहा है? – Santosh

+0

कारखाने/कन्स्ट्रक्टर आधारित इंजेक्शन से तत्काल कक्षाओं जैसे वैध उपयोग के मामले हैं। जब तक आप इस तरह के ढांचे को लिख नहीं रहे हैं, तो आप कन्स्ट्रक्टर इंजेक्शन के साथ कक्षा को तुरंत चालू करने के लिए एक डीआई का उपयोग भी कर सकते हैं। –

उत्तर

14

उदाहरण बनाने के लिए प्रतिबिंब का उपयोग करना है उदाहरण बनाने के लिए डिफ़ॉल्ट नो-एर्ग कन्स्ट्रक्टर।

Constructor<?> constructor = clazz.getConstructor(String.class); 
Object object = constructor.newInstance(new Object[] { strArgument }); 

उदाहरण बनाने के लिए यदि आपके पास कुछ अन्य कन्स्ट्रक्टर है जो तर्क लेता है।

3

आपको ऐसा करने के लिए प्रतिबिंब का उपयोग करने की आवश्यकता है, लेकिन हाँ यह निश्चित रूप से संभव है।

void MyMethod(Class className) 
{ 
    try { 
     Object obj = className.newInstance(); 
     //obj is a newly created object of the passed in type 
    } 
    catch (Exception ex) { } 
} 
2

आप प्रतिबिंब की तलाश में हैं।

आपका विधि कुछ इस तरह दिखेगा:

Object obj = clazz.newInstance(); 

इस का उपयोग करेगा:

public void m1(Class c) { 

     try { 
     Object obj = c.newInstance(); 
     //do something with your new instance 
    } catch (InstantiationException ex) { 

    } catch (IllegalAccessException ex) { 

    } 
} 

प्रतिबिंब एपीआई के लिए Oracle डॉक here

1

हाँ आप कर सकते हैं

void x(Class cls) throws InstantiationException, IllegalAccessException { 
    cls.newInstance(); 
} 

ध्यान दें कि Class.newInstance साथ

IllegalAccessException विफल हो सकता है - अगर वर्ग या उसके nullary निर्माता सुलभ नहीं है।

इंस्टेंटेशन अपवाद - यदि यह कक्षा एक अमूर्त वर्ग, एक इंटरफेस, एक सरणी वर्ग, एक आदिम प्रकार, या शून्य का प्रतिनिधित्व करती है; या अगर कक्षा में कोई निरर्थक कन्स्ट्रक्टर नहीं है; या अगर किसी अन्य कारण के लिए तत्काल विफल रहता है।

अधिक

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