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

Set vuelto loco

Estas en el tema de Set vuelto loco en el foro de Java en Foros del Web. Hola foro!!! Sencillamente eso, un Set totalmente loco. Tengo una clase Producto que contiene un Set de Puntos de venta y esto me ha ocurrido: ...
  #1 (permalink)  
Antiguo 19/12/2013, 08:39
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 19 años, 1 mes
Puntos: 7
Set vuelto loco

Hola foro!!!

Sencillamente eso, un Set totalmente loco. Tengo una clase Producto que contiene un Set de Puntos de venta y esto me ha ocurrido:

Código:
producto.getPuntos().add(punto);
Pues nada, que al pedirle luego los puntos al producto devolvia un Set vacío. Lo interesante es que Producto tiene otros Set que sí funcionan de esa manera. La solución que hallé es esta:

Código:
Set<Punto> puntos = producto.getPuntos();

puntos.add(punto);

producto.setPuntos(puntos);
De esta manera sí funcionó. Pero ya digo, los otros Set funcionan como el primer snippet. Entonces ¿cuál es el drama? La máquina virtual que uso es la 1.7.0 y el entorno de desarrollo el Eclipse Juno.

Entonces, mi pregunta es más bien de cultura general... esto es la primera vez que me sucede.
__________________
El último TipdaR
  #2 (permalink)  
Antiguo 19/12/2013, 08:53
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Set vuelto loco

¿Cual era el código de getPunto()?. Lo único posible que se me ocurre es que en ese getPuntos() hagas un new Set() cada vez que te lo piden.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 19/12/2013, 09:20
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 19 años, 1 mes
Puntos: 7
Respuesta: Set vuelto loco

Chuidiang, pues nada, el código de getPunto() es este:

public Set<Punto> getPuntos() {
return this.puntos;
}

En ningún momento invoqué al constructor, pero igual, me imagino que si en algún lugar hubiese un llamado a new al menos luego de

producto.getPuntos().add(punto);

debería al menos decir que hay 1 punto.
__________________
El último TipdaR
  #4 (permalink)  
Antiguo 19/12/2013, 14:12
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Set vuelto loco

No, porque cuando hagas producto.getPuntos() para ver cuántos puntos hay, te creará uno nuevo con cero elementos.

Lo que comentas en el primer post no tiene ningún sentido, no es posbile que haga eso si getPuntos() hace solo el return. Seguramente hay algo en tu código en algún sitio que provoca el error. De hecho, dices que otros Sets si te funcionan de igual forma. Revisa a ver, porque seguramente en este Set concreto (la clase que lo contiene o los sitios en los que la manejas) estas borrando sin querer el contenido del Set

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 24/12/2013, 11:16
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 19 años, 1 mes
Puntos: 7
Respuesta: Set vuelto loco

Es tu opinión y la respeto, pero no entiendo por qué dices que eso no tiene sentido.
__________________
El último TipdaR
  #6 (permalink)  
Antiguo 25/12/2013, 21:37
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Set vuelto loco

Hola,

Cita:
Iniciado por Tipdar Ver Mensaje
Es tu opinión y la respeto, pero no entiendo por qué dices que eso no tiene sentido.
Posiblemente se refiere a que esto:

Cita:
Iniciado por Tipdar Ver Mensaje
Código:
producto.getPuntos().add(punto);
Funciona exactamente igual a esto:

Cita:
Iniciado por Tipdar Ver Mensaje
Código:
Set<Punto> puntos = producto.getPuntos();
puntos.add(punto);
producto.setPuntos(puntos);
En este caso:

Código:
public Set<Punto> getPuntos() {
return this.puntos;
}
Por lo que en esa parte del código y en todo lo que has mencionado no se encuentra ningún motivo por el cual no deberían de funcionar exactamente de la misma forma. Posiblemente hay algo que no has mostrado o no has mencionado.

Saludos,
  #7 (permalink)  
Antiguo 02/01/2014, 02:56
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Set vuelto loco

Lo que debería buscar es algo como:

getPuntos().clear();

o

this.puntos.clear();

o ver si se hace algún new set de puntos en alguna parte del código.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: clase, loco, set
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 08:56.