SoloCodigo

Programación General => Java => Mensaje iniciado por: Cosmos009 en Miércoles 27 de Abril de 2011, 13:54

Título: Duda con un Warning en netBeans
Publicado por: Cosmos009 en Miércoles 27 de Abril de 2011, 13:54
Buenas a todos.
Tengo implementado un programa en Java, y en una de las clases, que implementa la interfaz Comparable, tengo un warning en el método quitarCuenta(), le he dado unas cuantas vueltas pero no acabo de coger el warning, la clase cuenta con  un atributo ArrayList, para almacenar las cuentas de cada cliente, todo funciona como se espera, pero el warning permanece.
Me gustaria si alguien a tenido experiencia con este tipo de Warning que me aclarará un poco de que se queja, porque lo podría configurar desde el hint para que no salga pero no me parece serio, prefiero saber que le pasa...
De antemano os agradezco la ayuda.
Posteo algo de código y el warning en sí:

private ArrayList<CuentaBancaria> cuentasCliente;

   public ClienteBanca(String nom, String dni){

        this.nombre=nom;
        this.dni=dni;
        this.cuentasCliente=new ArrayList<CuentaBancaria>();
    }

  public void quitarCuenta(long numC){    
         for (int i= 0; i < this.getCuentasCliente().size(); i++) {
            if(this.getCuentasCliente().get(i).getNumeroCuenta() == numC)
               this.getCuentasCliente().remove(i); //Aquí es donde apunta el warning,
        }      
    }


 public int compareTo(Object o) {
      ClienteBanca ord = (ClienteBanca)o;
      int resp=0;  
      String este= this.getDni().substring(0, 8);
      String otro= ord.getDni().substring(0, 8);
             
      long esteDni = Long.parseLong(este);
      long otroDni = Long.parseLong(otro);
      resp= (int)((int) esteDni - otroDni);

     return resp;

    }
Warning:
Suspicious call to java.util.Collection.remove:
Given object cannot contain instances of int (expected CuentaBancaria)
PD:Solo me cabe pensar que algo ocurre con la interfaz Comparable.  :brickwall:
Saludos y Gracias.
Título: Re: Duda con un Warning en netBeans
Publicado por: shadow_rev en Jueves 28 de Abril de 2011, 05:06
Sencillo, tienes que pasarle la instancia que quieres borrar, no el índice.
Código: Java
  1. // ...
  2. CuentaBancaria cuenta_a_borrar = this.getCuentasCliente().get(i);
  3. this.getCuentasCliente().remove(cuenta_a_borrar);
  4. // ...
  5.  

:suerte:
Título: Re: Duda con un Warning en netBeans
Publicado por: Cosmos009 en Jueves 28 de Abril de 2011, 10:02
Ok shadow_rev , gracias por la indicación ! , ya me quite de encima el warning  :beer:
Pero me surge una duda, porque se queja si se intenta eliminar a través de su índice ?
Saludos y Gracias.
Título: Re: Duda con un Warning en netBeans
Publicado por: shadow_rev en Jueves 28 de Abril de 2011, 22:41
Echando un vistazo al API de Collection (http://download.oracle.com/javase/6/docs/api/java/util/Collection.html) te puedes dar cuenta: el método remove() recibe como argumento un objeto (no un entero), si este objeto es igual a uno presente en la colección, lo quita.

Pienso que se hace así, ya que el índice es dinámico, es decir, no siempre vas a obtener el mismo objeto de una colección con el mismo índice si a esta colección la modificas agregando o quitando elementos. En otras palabras, el funcionamiento de una colección es distinto al de un array, ya que las colecciones (listas enlazadas, pilas, colas) son estructuras de datos dinámicas, mientras que un array es una estructura de datos estática.

Espero que con esto se aclaren tus dudas, y que los expertos me corrijan si me equivoco :smartass:
Título: Re: Duda con un Warning en netBeans
Publicado por: Cosmos009 en Viernes 29 de Abril de 2011, 09:47
Ok shadow_rev, gracias de nuevo ;)
Así lo tengo claro, puedo descansar :P.
Perfecto, yo seguia pensando en el remove(int index), de la clase ArraLiist, que esta si lo tiene.Entiendo que deja de ser operativo dicho método al implementar la interfaz Comparable?
Saludos. :good:
Título: Re: Duda con un Warning en netBeans
Publicado por: shadow_rev en Viernes 29 de Abril de 2011, 22:44
Ya entiendo que es lo que te ocurre. No es que deje de ser operativo, sino que el compilador cree que estas usando el otro. Si vas a usar el remove(int index) de ArrayList, captura el objeto que retorna la función. Intenta esto:
Código: Java
  1. // ...
  2. CuentaBancaria cuenta_borrada = this.getCuentasCliente().remove(cuenta_a_borrar);
  3. // ...
  4.  
La verdad es que no me había fijado que usabas ArrayList. :nosweat:  El warning te sale porque, como ArrayList tiene tanto el remove de Collection como el remove de List y ambos no retornan lo mismo (un valor boolean en uno y un objeto en el otro), y como no capturas lo que retorna la función, el compilador asume que usas el que retorna un boolean (el remove de Collection), y como un int es también un objeto, en vez de error, este te advierte que el parámetro que le estas pasando no corresponde con el tipo de objeto que almacena la colección.
Título: Re: Duda con un Warning en netBeans
Publicado por: Cosmos009 en Sábado 30 de Abril de 2011, 09:51
Muy bueno shadow_rev  :good:
Ahora si me dejo claro todo el tema.
Te doy las gracias por tus respuestas tan acertadas muy bien !!
Bueno espero volver a mantener con tigo alguna charla, que realmente fue un placer leerte.
Saludos y Thx.  :beer: