Java - Cast a partir de una cadena

 
Vista:

Cast a partir de una cadena

Publicado por Gabri (7 intervenciones) el 22/07/2005 17:41:58
Hola, espero que me podais ayudar... Hace poco pregunté como crear un objeto a partir de una cadena, y me ayudasteis sin problemas... Os lo agradezco.
Ahora me ha surgido un problema muy similar, y de este si que no tengo ni idea.
Quiero hacer un cast a partir de una cadena que me pasen. Es decir:

MiObjeto = (cadena_con_castt_a_realizar) ObjetoCualquiera;

Se os ocurre algo?? Yo estoy un poco perdido os agradecería mucho ideas...

Gracias y Adios
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:Cast a partir de una cadena

Publicado por Oscar (41 intervenciones) el 23/07/2005 00:21:47
Hola,

No conosco una forma de hacer eso, lo que si puedes es invocar cualquier metodo del objeto en cuestion con solo conocer el nombre. De poderse hacer eso que quieres, seria utilizando el API de Reflection. Aui puedes encontrar un tutorial:

http://java.sun.com/docs/books/tutorial/reflect/

Si no te molesta, me gustaria saber mas sobre el problema que estas resolviendo. Tengo la idea de que se puede resolver mas facilmente usando interfaces.

Saludos
Oscar
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:Cast a partir de una cadena

Publicado por Mario Serrano (13 intervenciones) el 23/07/2005 03:11:56
Si quieres pasar una cadena a un objeto de la clase Object tienes que hacer esto.

Object obj = "LA CADENA QUE QUIERAS";

y para hacer el proceso inveriso solo tienes que hace:

String cadena = (String)obj

o tambien.

String cadena = obj.toString();

OJO: No puedes hacer esto.

MiObjecto xx = "LA CADENA"; // OPERACION invalida
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:Cast a partir de una cadena

Publicado por Gabri (7 intervenciones) el 23/07/2005 18:24:17
Hola, te agradezco muxo tu interés, te cuento mi problema, a ver si es que estoy yendo por un camino equivocado.

Situacion: Tengo una plataforma java se servicios(OSGi se llama), que para acceder a uno de sus servicios un cliente simplemente tiene q crear un objeto del tipo servicio:

ClaseServicio1 MiObjeto = new ClaseServicio1();

Luego obtener una referencia del servicio:

MiObjeto = (ClaseServicio1) getReferenciaServicio(Serv);

Para lo que necesito realizar este cast q ves aqui. Mi problema quiero q el usuario meta por teclado el Servicio que desea para lo cual yo haria:

Class CServicio = Class.forname("Cadena q introduce usuario con servicio");
Object ObjServ = CServicio.newInstance(); //Aqui tendria el objeto

// Y ahora haría el cast maldito.....
ObjServ = (Cast con la cadena que introdujo el usuario) getReferenciaServicio(Serv);

Espero haberme explicado bien, se te ocurre alguna idea?? te lo agradecería mucho, porque me encuentro totalmente atascado...

Gracias
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:Cast a partir de una cadena

Publicado por Mario Serrano (13 intervenciones) el 23/07/2005 18:48:56
hola de nuevo..

Ya entendi lo que necesistas...

Primero te recomiendo que no tomes la cadena que ingresa el usuario y enseguida trates de crear la el objeto..

Lo que debes hacer es tomar la cadena que ingresa el usuario y realizar un filtro, es decir, verificas que el nombre del servicio que ingreso sea valido.. y otra cosa que tambien podriaas usar es que hagas una interfaz que sea implementada por los diferentes servicios

Ejemplo:

String CadenaUsuario = "el servicio";

haz algo por el estilo..

String claseServicio = null;

if(CadenaUsuario.equalsIgnoreCase("ServicioX"){
claseServicio = "ServicioX";
}// y todos los if que necesites

luego lo que estabas haciendo..

Class CServicio = Class.forName(claseServicio);
Object obj = CServicio.newInstance();

Luego, para estar seguros de que todo esta bien, realizamo otro filtro mas.

Servicio objServicio = null; //Objecto creado de la interfaz Servicio, es solo una
//referencia no el objeto como tal
if(obj != null )
if(obj instaceof Servicio)
objServicio = (Servicio)obj;

Eso es todo, solo aplicas un poco de polimorfismo..

Te encuenta que los servicios que implementen a la interfaz Servicio tienen que implementar sus metodos, esto es importante para que despues puedas hacer lo siguiente:

objServicio.elmetodoX( );

Observa que estas invocando el metodo de la interfaz, ella a su vez invoca ese mismo metodo del servicio que le asignaste en el casting. Asi no te preocupas que tipo de servicio es.

NOTA: Esta es una posible solucion

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:Cast a partir de una cadena

Publicado por Gabri (7 intervenciones) el 24/07/2005 11:38:30
Hola, muchas gracias, por aportarme ideas...
Me comentabas al final del texto q era una "posible solucion", eso quiere decir que hay otras?? es que esta exactamente tiene el problema de que los servicios no son desarrollados por mi, si no por distintos desarroladores cada uno de los cuales utiliza su propio interface...Este detalle me impediría hacer esto que me cuentas no?? De todas maneras muchas gracias y si hay mas soluciones, te agradecería mucho si me explicases alguna

Saludos
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:Cast a partir de una cadena

Publicado por Oscar (41 intervenciones) el 26/07/2005 06:39:55
Hola,

Algo simple seria que todos los servicios implementen una interface que tenga los metodos comunes para todos los servicios. De esta forma, no tendrias que hacer un cast diferente para cada servicio.

Seria algo asi:

public interface Servicio {
void hacerAlgo();
void enviarAlgo();
... mas metodos
}

Todas tus clases implementarian esa interface de esa forma, cuando crees una instancia de esa clase, la puedas manejar de esta forma:

Servicio objServ = (Servicio) getReferenciaServicio(Serv);

Y despues puedas mandar llamar los metodos que necesites.

Saludos
Oscar
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:Cast a partir de una cadena

Publicado por chuidiang (532 intervenciones) el 26/07/2005 15:09:27
Hola:

Yo veo casi obligatorio que los desarrolladores implementen una interface concreta.
Supón que no lo hacen y que eres capaz de hacer el cast que tú quieres... ¿A qué métodos llamas? Por introspección puedes saber qué métodos tiene la clase, pero ¿cómo sabe el código para que sirve cada método y a cual debe llamar?. Por ejemplo, si hay un método para abrir() el servicio, uno lo puede haber llamado abrir(), otro abriServicio (muchos parametros) y otro que es inglés open() y no te digo lo que puede haber puesto un checo.

Normalmente si una aplicación es abierta para que otros desarrolladores añadan módulos (servicios en este caso), es normal hacer una Interface y obligar a los otros desarrolladores a que implementen esa interface.

Se bueno.

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