मैं कंक्रीट उप-वर्गों के उदाहरणों को वापस करने के लिए एक अमूर्त कारखाने का उपयोग कर रहा हूं। मैं कंक्रीट क्लास नाम के स्ट्रिंग को दिए गए रनटाइम पर सबक्लास को तुरंत चालू करना चाहता हूं। मुझे कन्स्ट्रक्टर को पैरामीटर पास करने की भी आवश्यकता है। java.lang.NoSuchMethodException: Child.<init>()
, स्टैक ट्रेस द्वारा पीछा किया:पैरामीटर पर जावा इंस्टेंटिएट क्लास पैरामीटर
abstract class Parent {
private static HashMap<String, Child> instances = new HashMap<String,Child>()
private Object constructorParameter;
public static Child factory(String childName, Object constructorParam){
if(instances.keyExists(childName)){
return instances.get(childName);
}
//Some code here to instantiate the Child using constructorParam,
//then save Child into the HashMap, and then return the Child.
//Currently, I am doing:
Child instance = (Child) Class.forName(childClass).getConstructor().newInstance(new Object[] {constructorParam});
instances.put(childName, instance);
return instance;
}
//Constructor is protected so unrelated classes can't instantiate
protected Parent(Object param){
constructorParameter = param;
}
}//end Parent
class Child extends Parent {
protected Child(Object constructorParameter){
super(constructorParameter);
}
}
मेरे attmept ऊपर निम्न अपवाद फेंक है: वर्ग संरचना इस प्रकार है।
किसी भी मदद की सराहना की जाती है। धन्यवाद!
मैं इस कोशिश की और अब भी वही त्रुटि देख रहा हूँ में जोड़ें। क्या मुझे किसी भी कन्स्ट्रक्टर हस्ताक्षर बदलने की ज़रूरत है? फिलहाल हस्ताक्षर स्पष्ट रूप से ऑब्जेक्ट के पैरामीटर की अपेक्षा नहीं करते हैं, लेकिन कुछ और विशिष्ट हैं। – bibs
आपके 'constructorParam.getClass() 'को – Bozho
की अपेक्षा कर रहे सटीक पैरामीटर प्रकार को वापस करना चाहिए, उदाहरण के लिए, मुझे यकीन नहीं है कि creatorParam.getClass() क्या करता है। क्या आप अपने उत्तर को बेहतर समझा सकते हैं? धन्यवाद! – trusktr