Uso una fábrica de resumen para devolver las instancias de subclasses.I concreto le gustaría crear instancias de las subclases en tiempo de ejecución Dada una cadena del nombre de la clase concreta. También necesito pasar un parámetro a los constructores. La estructura de clase es el siguiente:Java Instantiate clase en tiempo de ejecución con parámetros
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);
}
}
Mi attmept anteriormente está lanzando la siguiente excepción: java.lang.NoSuchMethodException: Child.<init>()
, seguido por el seguimiento de la pila.
Cualquier ayuda es apreciada. ¡Gracias!
que probé esto y todavía estoy viendo el mismo error. ¿Debo modificar alguna firma de constructor? Por el momento, las firmas no esperan explícitamente parámetros de tipo Object, sino de algo más específico. – bibs
su 'constructorParam.getClass()' debe devolver el tipo de parámetro exacto que está esperando – Bozho
Basado en su ejemplo, no estoy seguro de lo que hace constructorParam.getClass(). ¿Puedes explicar mejor tu respuesta? ¡Gracias! – trusktr