Autoboxing/Unboxing
This facility eliminates the drudgery of manual conversion between primitive types (such as int) and wrapper types (such as Integer).
Mayor comodidad, ¿no?. A veces toca un poco las narices :-D.
No me entendáis mal, como opción, el autoboxing es cómodo, en casi todos los casos. El problema viene más bien por la ineptitud de algunos programadores, lease “un servidor”. Y es que es una fuente de posibles bugs, pues no te avisa (como si sucedía antes) de que estas metiendo algo que no tiene sentido, o de que quieres eliminar algo que no tiene sentido, como es mi caso.
La respuesta fácil para solucionar este tipo de cosas podría ser la de usar otra de las novedades (resulta raro hablar de novedades dos años después!) del JDK 5.0: generics, pero no siempre está disponible esa opción, como en el caso en que usemos librerías que nos pueden devolver una colección que no esta declarada con genéricos. ¿O sí?.
Pregunta para el lector de fácil comprobación: ¿puedo recibir en una declaración de genéricos el resultado de un método que no está definido con ella?


Hola, no habia oído hablar del Autboxing/Unboxing. Siempre es bueno aprender cosas nuevas… gracias por ello.
En respuesta a tu pregunta, si he entendido bien la documentación de sun, es no, como resultado tenemos un error ClassCastException en el stack trace. es asi?
Un saludo!
A lo mejor no me he explicado. Mi pregunta era la siguiente. Dado el siguiente código (por ello lo de fácil comprobación):
import java.util.*;
public class Test{
public static void main(String[] args){
Test t = new Test();
List[Long] list = t.getList();
System.out.println(list);
}
public List getList(){
List l = new ArrayList();
l.add(”String”);
return l;
}
}
Dónde se añade un “String” a un lista, que se recoge en una variable declarada con genérics… se hace la comprobación de que la lista que recoge “list” como resultado del método “getList” sólo contenga instancias de “Long”?. Lamentablemente no (en Mac OS X con JDK de Apple), de modo que… no ayuda, se lo traga.
La forma en la que podríamos ayudarnos a checkear el resultado es usando los generics en otra interface (que lamentablemente usa menos gente de la que debería) del API collections: iterator.
for (Iterator[Long] i = list.iterator(); i.hasNext(); )
System.out.println(i.next().getClass().getName());
Pero claro, eso es simple comodidad a la hora de recorrerlo, no comprueba ni al insertar ni en tiempo de compilación, algo que si hace si declaramos desde el principio la colección con generics:
List[Long] n = new ArrayListLong;
Bueno, he tenido que escribir corchetes en lugar de mayor y menor para declarar los generics.
Tienes razon, y es un caso que se puede dar a menudo por descuidos del programador.
Un saludo!