Autor Tema: error con lista java warning uses unchecked or unsafe operations  (Leído 12475 veces)

Susana83

  • Sin experiencia
  • *
  • Mensajes: 49
    • Ver Perfil
Hola! Estoy estudiando java y no entiendo por qué salta warning y por qué salta luego un error en este código

Dejo el código:

Código: [Seleccionar]
    import java.util.*; 
      public class ListExample { 
      public static void main(String[] args) { 
        // declaration 
        List list = new ArrayList(); 
        Iterator elements = list.iterator(); 
        // als some elements to the list 
        list.add("par"); 
        list.add("arroz"); 
        list.add("harina"); 
        list.add(new Integer(4)); 
        list.add(new Float(5.0F)); 
        list.add("arroz"); 
        // duplicate element, is added to list 
        list.add(new Integer(4)); // duplicate, is added 
     
        //  Print contents of the list 
        while (elements.hasNext()) { 
          System.out.println(elements.next()); 
        }  // while 
      } // main 
    } // class 
« Última modificación: 27 de Septiembre 2014, 18:19 por Alex Rodríguez »

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:error con lista java
« Respuesta #1 en: 22 de Septiembre 2014, 19:01 »
Hola Susana, bueno intentare explicarte lo que te esta ocurriendo.

Si te fijas en tu código, creas una lista:
Código: [Seleccionar]
List list = new ArrayList(); 

Hasta aquí bien, en tu siguiente linea, creas el iterador.

Código: [Seleccionar]
Iterator elements = list.iterator();

El problema es que cuando le pides a la lista que te pase un iterador, la lista aun esta vacía, por lo tanto te devuelve un iterador sin elementos, y eso es lo que te provoca el error. Para resolverlo, basta con rellenar la lista primero y tras rellenarla crear el iterador. El código te quedaría de la siguiente manera:

Código: [Seleccionar]
import java.util.*; 
      public class ListExample { 
      public static void main(String[] args) { 
        // declaration 
        List list = new ArrayList(); 
         
        // als some elements to the list 
        list.add("par"); 
        list.add("arroz"); 
        list.add("harina"); 
        list.add(new Integer(4)); 
        list.add(new Float(5.0F)); 
        list.add("arroz"); 
        // duplicate element, is added to list 
        list.add(new Integer(4)); // duplicate, is added 
      Iterator elements = list.iterator();
        //  Print contents of the list 
        while (elements.hasNext()) { 
          System.out.println(elements.next()); 
        }  // while 
      } // main 
    } // class

Eso es sobre el error en tiempo de ejecucion que todo venia por que el iterador no contenía elementos.

Sobre los warnings, a mi me saltan 3, El mensaje es algo así como Unnecesary boxes patatin patatan...

Eso solo es un warning y significa que no era necesario crear los objetos explicitamente, ya que como estas creando una lista de Object, podrías haberlos puesto implicitamente y la maquina de java se encargaría de encapsular cada tipo, por tanto para que desaparezcan los warnings, basta con este código:

Código: [Seleccionar]
import java.util.*; 
      public class ListExample { 
      public static void main(String[] args) { 
        // declaration 
        List list = new ArrayList(); 
         
        // als some elements to the list 
        list.add("par"); 
        list.add("arroz"); 
        list.add("harina"); 
        list.add(4); 
        list.add(5.0F); 
        list.add("arroz"); 
        // duplicate element, is added to list 
        list.add(4); // duplicate, is added 
      Iterator elements = list.iterator();
        //  Print contents of the list 
        while (elements.hasNext()) { 
          System.out.println(elements.next()); 
        }  // while 
      } // main 
    } // class


Y bueno espero habértelo resuelto todo. Un saludo!

Susana83

  • Sin experiencia
  • *
  • Mensajes: 49
    • Ver Perfil
Re:error con lista java
« Respuesta #2 en: 27 de Septiembre 2014, 18:08 »
Gracias por la explicacion dongo. El programa ahora funciona aunque aparece warning: "ListExample.java uses unchecked or unsafe operations" y no se por qué  :'(

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
    • Twitter @Sniperofelite
Re:error con lista java warning uses unchecked or unsafe operations
« Respuesta #3 en: 28 de Septiembre 2014, 00:19 »
 Hola Susana83!

Respecto a tu inquietud sobre el warning que salta con relación al ultimo código en este hilo, te comento lo siguiente:

Lo primero a tener en cuenta es, que contiene tu ArrayList? Tu ArrayList contiene objetos, todos los objetos son del tipo definido por su clase, en tu ArrayList tenemos instancias (objetos) de las clases String, Integer y Float.

En esta linea de tu codigo:
Código: [Seleccionar]
List list = new ArrayList (); Lo correcto seria usar una sintaxis como:
Código: [Seleccionar]
List<TipoDeObjeto> list = new ArrayList<TipoDeObjeto>(); donde TipoDeObjeto indica el tipo de objeto que contendra la lista, ahora bien! te podrias preguntar, si mi lista contiene tres tipos diferentes (String, Integer, Float), cual es el que debo de usar aquí?

Aquí es donde entra lo que se conoce como "polimorfismo" el polimorfismo se cumple cuando un objeto puede ser declarado tanto del tipo definido por su clase, como del tipo de una clase de la cual herede, o implemente su propia clase (clase originaria del objeto). Si tenemos en cuenta que todas las clases heredan de la clase Object, pues podriamos concluir que una solución a esto seria esta:
Código: [Seleccionar]
List<Object> list = new ArrayList<Object>(); y lo mismo para el Iterator:
Código: [Seleccionar]
Iterator<Object> elements = list.iterator();
Tu código en general quedaría así:
Código: [Seleccionar]

import java.util.*; 
      public class ListExample { 
      public static void main(String[] args) { 
        // declaration 
        List<Object> list = new ArrayList<Object>(); 
         
        // als some elements to the list 
        list.add("par"); 
        list.add("arroz"); 
        list.add("harina"); 
        list.add(4); 
        list.add(5.0F); 
        list.add("arroz"); 
        // duplicate element, is added to list 
        list.add(4); // duplicate, is added 
        Iterator<Object> elements = list.iterator();
        //  Print contents of the list 
        while (elements.hasNext()) { 
          System.out.println(elements.next()); 
        }  // while 
      } // main 
    } // class
Con esto queda resuelto lo del warning, espero que te sea útil mi explicación.

Saludos!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}
By: https://twitter.com/SniperOfElite

Susana83

  • Sin experiencia
  • *
  • Mensajes: 49
    • Ver Perfil
Re:error con lista java warning uses unchecked or unsafe operations
« Respuesta #4 en: 28 de Septiembre 2014, 18:13 »
Tienes razon Sniper el warning desaparece mi duda venia en habiendo muchos tipos de datos no saber qué tipo de dato usar, pero con Object funciona a la perfección. Gracias por vuestra ayuda!!!


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".