Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/05/2010, 16:12
Avatar de DiabloGuardian
DiabloGuardian
 
Fecha de Ingreso: noviembre-2008
Ubicación: Hidalgo
Mensajes: 215
Antigüedad: 16 años
Puntos: 3
Respuesta: Cambiar un objeto de clase en un ArrayList

Hola!!
La documentacion de java dice:

Cita:
Esta excepción puede ser lanzada por los métodos que se han detectado modificaciones simultáneas de un objeto cuando tal modificación no está permitido.

...

Por ejemplo, si un hilo modifica una colección directamente mientras se está interactuando sobre la colección con un iterador no-rápido, el iterador lanzarán esta excepción.
Eso quiere decir que:

Código java:
Ver original
  1. public void cambiarClienteAVIP(String nifCliente)
  2. {
  3. int indice = 0;
  4. for(Cliente clienteCambiado : clientes) {
  5. if (nifCliente.equals(clienteCambiado.getNif())) {
  6. ClienteVIP nuevoCliente = new ClienteVIP(clienteCambiado.getNombre(), clienteCambiado.getApellidos(),
  7. clienteCambiado.getNif(), clienteCambiado.getSexo(), clienteCambiado.getAñoDeNacimiento(),
  8. clienteCambiado.getNumeroDeCliente(), clienteCambiado.getAñoDeAlta());
  9.  
  10.  
  11. clientes.remove(clienteCambiado);  <<-- Aqui intentas eliminar un objeto que esta siendo usado
  12.  
  13.  
  14. clientes.add(nuevoCliente);
  15. indice++;
  16. }
  17. }
  18. if (indice == 0) {
  19. System.out.println("El NIF indicado no corresponde a ningún cliente");
  20. }
  21.  
  22. }

Se me ocurren dos posibles soluciones:
1) puedes clonar tu objeto haciendo algo asi:

Código java:
Ver original
  1. Cliente clienteTemp = clienteCambiado.clone();
  2. clientes.remove(clienteTemp);

2) Podrias hacer unos castings, si dices que ClientesVIP es una subclase de Clientes, intenta hacer algo asi:


Código java:
Ver original
  1. public void cambiarClienteAVIP(String nifCliente)
  2. {
  3. int indice = 0;
  4. for(Cliente clienteCambiado : clientes) {
  5. if (nifCliente.equals(clienteCambiado.getNif())) {
  6. clienteCambiado=(ClienteVIP)clienteCambiado;
  7. //aqui solo agregarias los valores de los atributos que cambian
  8. indice++;
  9. }
  10. }
  11. if (indice == 0) {
  12. System.out.println("El NIF indicado no corresponde a ningún cliente");
  13. }
  14.  
  15. }


Ojala te sirva esto, saludos
__________________
-=:[ Lo importante no es saber todo, sino saber buscar ]:=-