• Jueves 14 de Noviembre de 2024, 19:27

Autor Tema:  Duda con un Warning en netBeans  (Leído 3382 veces)

Cosmos009

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Duda con un Warning en netBeans
« en: Miércoles 27 de Abril de 2011, 13:54 »
0
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.

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: Duda con un Warning en netBeans
« Respuesta #1 en: Jueves 28 de Abril de 2011, 05:06 »
0
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:
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

Cosmos009

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Duda con un Warning en netBeans
« Respuesta #2 en: Jueves 28 de Abril de 2011, 10:02 »
0
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.

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: Duda con un Warning en netBeans
« Respuesta #3 en: Jueves 28 de Abril de 2011, 22:41 »
0
Echando un vistazo al API de Collection 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:
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

Cosmos009

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Duda con un Warning en netBeans
« Respuesta #4 en: Viernes 29 de Abril de 2011, 09:47 »
0
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:

shadow_rev

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: Duda con un Warning en netBeans
« Respuesta #5 en: Viernes 29 de Abril de 2011, 22:44 »
0
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.
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

Cosmos009

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Duda con un Warning en netBeans
« Respuesta #6 en: Sábado 30 de Abril de 2011, 09:51 »
0
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: