Foros del Web » Programación para mayores de 30 ;) » Java »

Casting 2 objetos

Estas en el tema de Casting 2 objetos en el foro de Java en Foros del Web. Hola tengo esta 2 clases: Código: class Persona{ String nombre String apellido int edad } y Código: class Usuario{ String nombre String apellido } y ...
  #1 (permalink)  
Antiguo 12/02/2014, 06:48
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 4 meses
Puntos: 21
Casting 2 objetos

Hola tengo esta 2 clases:
Código:
class Persona{
String nombre
String apellido
int edad
}
y

Código:
class Usuario{
String nombre
String apellido
}
y tengo un metodo:

Código:
public Persona transformar(Usuario usuario){
Persona p=new Persona()
p.nombre=usuario.nombre
p.apellido=usuario.apellido

return p
}
Hasta aqui todo correcto esto funcionaria pero imaginemos que en vez de 2 atributos son 1000, hay alguna forma mas optima de hacer esto?

Saludos
__________________
Oye los consejos de todo el mundo, y sigue el tuyo.
Si te han ayudado deja un karma y si no te han ayudado pero vez util la información tb deja un karma xD
Sirdaiz

Última edición por sirdaiz; 12/02/2014 a las 06:53
  #2 (permalink)  
Antiguo 12/02/2014, 07:14
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Casting 2 objetos

No, si son 1000 atributos, tienes que ponerlos todos. Pero como es un rollo y nadie se plantea poner 1000 atributos a mano, hay otras alternativas.

Una es usar un HashMap. En él puedes meter objetos identificándolos por una clave que puede ser un String.

Código Java:
Ver original
  1. Hashmap<String, Object> a = new HashMap<String,Object>();
  2. a.put("nombre","Pedro");
  3. a.put("apellido","Garcia");
  4. a.put("edad", new Integer(33));
  5. ...

no es una clase, pero sirve para meter muchos atributos.

Otra opción, si tienes los atributos en algún sitio legible (columnas de una tabla en bd o donde sea), es hacer un script que te genere el fichero .java y cualquier otra cosa que necesites (formulario, etc).

Si tu problema concreto es transformar Usuario a Persona y los atributos coinciden 1 a 1, ¿Por qué necesitas dos clases?. En cualquier caso, si coinciden 1 a 1 puedes usar "reflexión" de java. Con persona.getClass() puedes interrogarle sobre que atributos y métodos tiene la clase y puedes de la misma forma llamar a métodos de usuario, todo ello en un bucle para cada atributo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 12/02/2014, 07:23
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 4 meses
Puntos: 21
Respuesta: Casting 2 objetos

Mi problema realmente es:

Tengo un metodo:
Código:
public PersonaWS buscar(String nombre){
PersonaWS p = new PersonaWS()

//aqui hago una consulta a BBDD:
Persona p2=Persona.findByNombre(nombre)

//aquí me gustaria hacer una especie de casting de p2 a p

return p
}
He visto algun ejemplo de transformar p2 a xml? y asi poder inyectarlo, es posible????, suponiendo q PersonaWS:

Código:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "personaRespuesta", propOrder = {
    "nombre",
    "apellido"
})
public class PersonaWS {
	String nombre;
	String apellido;
	
	
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getApellido() {
		return apellido;
	}
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	
}
__________________
Oye los consejos de todo el mundo, y sigue el tuyo.
Si te han ayudado deja un karma y si no te han ayudado pero vez util la información tb deja un karma xD
Sirdaiz
  #4 (permalink)  
Antiguo 12/02/2014, 11:44
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Casting 2 objetos

Hola:

Sí, si las clases tienen los mismos atributos, hay librerías que pasan esos objetos a XML o JSON y luego son capaces de reconstruirlo en la otra. De XML no he usado ninguna, pero con JSON funciona bastante bien y es bastante sencilla de usar la librería de google GSON https://code.google.com/p/google-gson/ , con un par de líneas podrías apañarlo

Código Java:
Ver original
  1. Gson gson = new Gson();
  2. String json = gson.toJSon(p2); // p2 es tu Persona
  3. Persona p2 = gson.fromJson(json, PeronaWS.class);

Por debajo, esta librería hace lo que te comentaba de la reflexión de java.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: clase, metodo, objetos, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:38.