2012-10-10 6 views
7

Estoy tratando de crear un objeto de una clase dinámicamente enviando el nombre de la clase como una cadena. He buscado en todos los foros de Java pero no pude obtener la respuesta que quería. Aquí es mi requerimiento, tengo una clase con el nombre del agente,Creando un objeto dinámicamente donde el nombre de clase se da como una cadena

package somePack; 

public class Agent{ 
    private String Id; 
    Private String Name; 
    public String getId() { 
    return this.id; 
    } 
    public void setId(String id) { 
    this.id = id; 
    } 
    public String getName() { 
    return this.name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
} 

package somePack; 

public class Employee{ 
    private String Id; 
    Private String Name; 
    public String getId() { 
    return this.id; 
    } 
    public void setId(String id) { 
    this.id = id; 
    } 
    public String getName() { 
    return this.name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
} 
public class create{ 
    public static void main(String[] args){ 
     newCreate("Employee"); 
     newCreate("Agent"); 
    } 
    public static void newCreate(String name){ 
     String path="somePack."+name; 
     Class cls=Class.forName(path); 
     System.out.println("Class Name " + cls.getName()); 
    } 
} 

Ahora mi pregunta es, cls.getName() me da el nombre de la clase, pero ahora quiero crear el objeto para el que es decir la clase , para clase de empleado y clase de agente, respectivamente, pero ¿cómo puedo crear el objeto para ellos? La cadena que se pasa puede ser otra cosa del otro método, ¿cómo puedo crear un objeto para ese tipo de cosas?

Puede alguien ayudarme ....

gracias de antemano,

+2

Class.forName() de búsqueda para esto. – mihsathe

Respuesta

6

Uso Class#newInstance()

Object o = Class.forName(path).newInstance(); 

A continuación, puede jugar esta carta al agente.

Agent agent = (Agent) Class.forName(path).newInstance(); 
+0

Si uso Object o = Class.forName (path) .newInstance(); entonces, ¿cómo puedo establecer y obtener los valores para la clase? – Praveen

+0

Hola, Matthew, gracias por tu respuesta, pero si hay unas 50 clases y, según algunos criterios, envío la cadena relacionada como parámetro, entonces, ¿cómo puedo saber qué objeto de clase se creará de forma dinámica? Es decir, ahora lo estoy pasando como "Agente", luego, si puedo pasar "Empleado", entonces, cómo este método me será útil para generar el valor de la variable de cadena como un objeto – Praveen

8

pero ahora quiero crear el objeto de esa clase

A continuación, utilice el método Class.newInstance() si nunca necesita para manejar los constructores con argumentos, o utilizar Class.getConstructor(...) o Class.getConstructors() lo contrario. (Llame al Constructor.newInstance() para invocar el constructor.)

+0

Me tengo por 17 segundos – MadProgrammer

+0

hola Jon, I desea crear un objeto para una clase del valor de la variable de cadena. Si no lo conozco como "Agente", podría ser otra cosa, ¿cómo puedo generarlo dinámicamente? Espero que tengas mi pregunta ... – Praveen

5

Sobre la base de que la clase tiene un constructor predeterminado (es decir, sin parámetros), simplemente puede llamar al Class#newInstance.

Si tiene parámetros, se vuelve un poco más complicado.

Debería obtener una referencia al Constructor apropiado a través de Class#getConstructor, pasando los tipos de clase de parámetros esperados.

Una vez que tenga eso, se puede llamar Constructor#newInstance pasándole los objetos apropiados

+3

3 + Tres muchachos muy buenos que luchan por una solución simple :) –

Cuestiones relacionadas