Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Susana83 en 22 de Septiembre 2014, 18:23

Título: error con lista java warning uses unchecked or unsafe operations
Publicado por: Susana83 en 22 de Septiembre 2014, 18:23
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 
Título: Re:error con lista java
Publicado por: dongo 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!
Título: Re:error con lista java
Publicado por: Susana83 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é  :'(
Título: Re:error con lista java warning uses unchecked or unsafe operations
Publicado por: Jorge lopez 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!
Título: Re:error con lista java warning uses unchecked or unsafe operations
Publicado por: Susana83 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!!!