2011-06-05 11 views
36

उदाहरण के लिए:प्रतिबिंब का उपयोग कर कन्स्ट्रक्टर में पैरामीटर के साथ कक्षा के उदाहरण कैसे बनाएं?

public class Test { 

    public static void main(String[] args) throws Exception { 
     Car c= (Car) Class.forName("Car").newInstance(); 
     System.out.println(c.getName()); 
    } 
} 

class Car { 
    String name = "Default Car"; 
    String getName(){return this.name;} 
} 

स्पष्ट कोड।

लेकिन, अगर मैं पैरामीटर वाला निर्माता जोड़ने के लिए, इस तरह की कुछ:

public Car(String name) 
{this.name = name;} 

मैं देख रहा हूँ: java.lang.InstantiationException

तो, कोई मुझे पता नहीं, कैसे पैरामीटर वाला निर्माता गुजरती हैं।

कृपया, सहायता करें।

उत्तर

72

आपको यह कहना होगा कि आप किस कन्स्ट्रक्टर को तर्कों का उपयोग करना चाहते हैं।

Car c = Car.class.getConstructor(String.class).newInstance("Lightning McQueen"); 
+0

देशी प्रकारों के लिए, Integer.class – mcoolive

+0

@mcoolive या int.class के बजाय Integer.TYPE का उपयोग करें (उदाहरण के लिए) –

7

आप सुपर/उपवर्गों संभाल रहे हैं, या जो भी कारण वास्तव में नहीं पता है कि क्लास instantiated जा करने के लिए कर रहा है के लिए हैं, तो forName() विधि भी आवश्यकता होगी:

(ClassName) Class.forName([name_of_the_class]) 
     .getConstructor([Type]).newInstance([Constructor Argument]); 

इसका मतलब यह है name_of_the_class एक पारित चर है। इसके अलावा, यदि कक्षा पैकेज में है, भले ही वह पैकेज आयात किया गया हो, फिर भी आपको अभी भी नाम() में पैकेज को स्पष्ट रूप से निर्धारित करना होगा (मुझे लगता है, मैं यह सब नया हूं)।

Class.forName([name_of_package].[name_of_class]) 
संबंधित मुद्दे