Java - Como instanciarme una clase pasada por parametro??

 
Vista:

Como instanciarme una clase pasada por parametro??

Publicado por Sonia_m (1 intervención) el 03/04/2001 13:22:59
EL problema q tengo es q me llega un String a un metodo con el nombre de una clase, y no se como hacer para poder instanciarmela.
Ejm.
Me llega el parametro "String CLASE" con el valor "java.lang.String" y yo no puedo hacer una instanciacion de esa vble "CLASE", pq la toma como si fuera un String.

Si alguien sabe algo relacionado con el tema, agradeceria ayuda.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Como instanciarme una clase pasada por parametr

Publicado por Alejandro (9 intervenciones) el 03/04/2001 15:58:07
Lo que tu quieres es una función parecida al eval() de JavaScript. Nunca he visto algo parecido en Java; por supuesto esto no quiere decir ni muchisimo menos que no exista.

Me parece raro que tengas que pasar el nombre de la clase por string, para luego instanciar un objeto. Lo "normal" es que pases una instancia de una determinada clase, o de la clase object, algo del estilo:

public void miMetodo(miClase CLASE)
/* se pasa un objeto de clase miClase */

ó

public void miMetodo(Object CLASE)
/* se pasa un objeto Object y luego habría que
hacer el casting teniendo muy claro de que clase
es el objeto pasado */

Si consigues encontrar la forma de hacer lo que tu quieres, o alguien lo sabe, le agradecería mucho lo comunicase.

Un saludo a todos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como instanciarme una clase pasada por parametr

Publicado por Xavi Canal (241 intervenciones) el 04/04/2001 16:30:54
Nas,

si se puede

deberás usar:

Class laClase = Class.forName (stringConElNombre);

y para instanciar via un casting

TipoClase tc = (TipoClase) laClase.newInstance ();

att. Xavi Canal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como instanciarme una clase pasada por parametr

Publicado por Alejandro (9 intervenciones) el 04/04/2001 17:51:11
Evidentemente lo que tu dices es correcto, Xavi, se puede obtener una instancia de un objeto a traves de la clase Class, pero siempre necesitarás saber "a priori" el nombre de la clase que tú llamas TipoClase para poder prototipar la instancia de clase y poder ejecutar:

TipoClase tc = (TipoClase)laClase.newInstance();

Por ejemplo, si haces:

Class laClase = Class.forName("java.util.Vector");

Luego tienes que hacer:

Vector tc = (Vector)laClase.newInstance();

Pero si no sabes a priori el valor que puede tomar la variable stringConElNombre ¿cómo puedes prototipar la instancia?. Tendrías que hacer algo genérico:

Object tc = (Object)laClase.newInstance();

Y no sabrías realmente de que clase es este objeto para así poder usar sus métodos y atributos.

Creo que lo que pide Sonia, o por lo menos lo que yo interpreto, es poder únicamente con el contenido de la variable stringConElNombre hacer algo como un eval() en JavaScript (supongo que lo conoces). Algo del estilo:

eval(stringConElNombre + " tc = new " + stringConElNombre + "();");

Es decir, montar una instrucción en tiempo de ejecución.

No se si me he explicado bien, de todas formas creo que esto es muy académico y hay muchas formas de evitar este problema, aunque estaría bien charlar sobre esto.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como instanciarme una clase pasada por parametr

Publicado por Sonia_m (1 intervención) el 04/04/2001 18:51:33
La verdad es q me ha sorprendido lo bien q me has entendido, Alejandro, precisamente es lo q estaba buscando, una clase q se asemejara al eval de javaScript, pero aun no la he encontrado, y como tu bien dices con el newInstance no puedo instanciarme el objeto pq no puedo indicarle el casting de la clase q necesito.

Si logras encontrar algo q me sirva parecido al eval te lo agradeceria muchisimo.

Gracias y besos....

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como instanciarme una clase pasada por parametr

Publicado por Alejandro (9 intervenciones) el 05/04/2001 11:05:03
No tienes por que darme las gracias, Sonia. Por mí encantado de poder hablar sobre estos temas.

De hecho lo que tú buscas me hubiese venido muy bien en una parte de la aplicación que estamos desarrollando.

No creo que sea posible algo parecido al eval en java, puesto que es un lenguaje con un fuerte prototipado, a diferencia de javascript. Sería demasiado bonito para ser verdad, pero quien sabe, a lo mejor se puede (yo seguire buscando).

Una posible alternativa es usar la clase Class, tal como comenta Xavi anteriormente, luego usar el método getName() para conocer el nombre de la clase y luego preguntar si es alguna de las clases que usas en tu aplicación. Algo del estilo:

Class t = Class.forName(stringDeClase);
String tipoClase = t.getName();
if (t.equals("java.util.Vector")){
Vector vec = new Vector();
}else if (t.equals("java.lang.Integer")){
Integer entero = new Integer(10);
}...

Pero siempre tendrás que conocer a priori las posibles clases que puede contener la variable
stringDeClase.

Espero que puedas solucionar tu problema.

Un saludo Sonia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Como instanciarme una clase pasada por parametr

Publicado por Xavi Canal (241 intervenciones) el 05/04/2001 11:50:50
Nas,

¿podrias explciarnos exactamente que es lo que
quieres hacer, Sonia?
Con código si es posible, para ver las posibles
soluciones.

Nosotros, en nuestra aplicación usamos la carga
dinámica de clases, pero a priori ya sabemos
de que tipo son, de que tipo extienden estas o
que interfaz implementa, así podemos llamar a
los métodos de estas (util para hacer plugins)

att. Xavi Canal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar