Novedades en Java 7

Novedades en Java 7

java_logo

Aunque todavía queda un poco para el lanzamiento de la versión estable de Java 7 (ahora mismo si no me equivoco están en la actualización 17 de Java 6), aquí os traigo una serie de mejoras que va a incorporar y que podéis ya probar a través del JDK 7 Early Access.

La recopilación de las mejoras ha salido publicada en el blog tecnológico de JoeJag (en inglés) y aquí os la dejo traducida:

Soporte mejorado para colecciones

A partir de ahora las colecciones podrán declararse al estilo de Ruby o Perl. En lugar de tener que hacer:
List list = new ArrayList();
list.add("item");
String item = list.get(0);

Set set = new HashSet();
set.add("item");

Map map = new HashMap();
map.put("key", 1);
int value = map.get("key");

Se podrá hacer directamente:
List list = ["item"];
String item = list[0];

Set set = {"item"};

Map map = {"key" : 1};
int value = map["key"];

Manejo automático de recursos

Algunos recursos como InputStream, Writers, Sockets o clases relacionadas con Sql, tienen que ser ser cerrados manualmente en cada utilización, por ejemplo:
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}

Sin embargo, a partir de ahora, automáticamente podremos hacer:
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}

O si tenemos más de un recurso:
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// código
}

Inferencia de tipos mejorada para creación genérica de instancias (operador diamante < >)

Si antes estábamos obligados a hacer:
Map> anagrams = new HashMap>();

Ahora simplemente:
Map> anagrams = new HashMap<>();

Barras bajas en literales numéricos

Porque los números grandes son complejos de leer sin problemas:
int un_millon= 1_000_000;

Cadenas para la clausula switch

Posiblemente el más esperado de todos (hasta ahora sólo los tipos enum y números podían ser utilizados en los switch). Ya podremos hacer directamente:
String s = ...
switch(s) {
case "linuxhispano":
llamar(w);

case "web":
case "internet":
procesar(w);
break;

case "foo":
procesarfoo(s);
// fall-through

default:
demas(s);
break;
}

Binarios literales

Utilizando el prefijo 0b (es un cero ‘0’ no una o), podremos representar directamente enteros en formato binario:
int binary = 0b1001_1001;

Simplificación de la invocación de métodos con argumentos variables

Si hasta ahora el compilador emitía warning en el lugar de la llamada al método, ahora lo hará en el de la declaración del mismo para facilitar la labor a los desarrolladores.