से कन्स्ट्रक्टर के साथ उप-वर्ग का उदाहरण कैसे बनाएं, मैं कक्षाओं के लिए एक रजिस्ट्री बनाना चाहता हूं जो सुपर क्लास के उप-वर्ग हैं। कक्षाएं मानचित्र में संग्रहीत होती हैं जो रजिस्ट्री के रूप में कार्य करती है। एक कुंजी के आधार पर रजिस्ट्री से एक वर्ग चुना जाता है और उस वर्ग का एक उदाहरण प्रतिबिंब के माध्यम से बनाया जाएगा।सुपर क्लास
मैं सुपर क्लास के कन्स्ट्रक्टर (1 पैरामीटर के साथ) के आधार पर कक्षा को तुरंत चालू करना चाहता हूं। यह केवल तभी काम करता है जब मैं सबक्लास में कन्स्ट्रक्टर घोषित करता हूं।
क्या एक सुपर क्लास के निर्माता का उपयोग करके कक्षा को तुरंत चालू करने का कोई तरीका है? क्या कोड कोड-सुरक्षित बनाने का कोई तरीका है?
उदाहरण कोड:
public class ReflectionTest {
/**
* Base class with no-args constructor and another constructor with 1 parameter
*/
public static class BaseClass {
Object object;
public BaseClass() {
System.out.println("Constructor with no args");
}
public BaseClass(Object object) {
this.object = object;
System.out.println("Constructor with parameter= " + object);
}
public String toString() {
return "Object = " + object;
}
}
/**
* Subclass with 1 parameter constructor
*/
public static class SubClass1 extends BaseClass {
public SubClass1(Object object) {
super(object);
}
}
/**
* Subclass with no-args constructor
*/
public static class SubClass2 extends BaseClass {
}
public static void main(String[] args) {
// registry for classes
Map<Integer,Class<?>> registry = new HashMap<>();
registry.put(0, SubClass1.class);
registry.put(1, SubClass2.class);
// iterate through classes and create instances
for(Integer key: registry.keySet()) {
// get class from registry
Class<?> clazz = registry.get(key);
try {
// get constructor with parameter
Constructor constructor = clazz.getDeclaredConstructor(Object.class);
// instantiate class
BaseClass instance = (BaseClass) constructor.newInstance(key);
// logging
System.out.println("Instance for key " + key + ", " + instance);
} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
System.exit(0);
}
}
उदाहरण निम्नलिखित कंसोल आउटपुट देता है:
Constructor with parameter= 0
Instance for key 0, Object = 0
java.lang.NoSuchMethodException: swing.table.ReflectionTest$SubClass2.<init>(java.lang.Object)
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getConstructor(Class.java:1825)
at swing.table.ReflectionTest.main(ReflectionTest.java:63)
यदि आप किसी विशेष सबक्लास में शून्य और एक-तर्क निर्माता दोनों होते हैं तो आप क्या करना चाहते हैं? –