A unas semanas de la renuncia de Gosling a Oracle y en un mundo en que tanto Groovy, Scala como Clojure, todos lenguajes implementados sobre la JVM no paran de crecer y amenazan reemplazar a un alicaído Java, les vamos a comentar algunas de las novedades que traerá la séptima versión del popular lenguaje, que vería la luz a finales de año (aunque dicen las malas lenguas que esta fecha podría posponerse para el 2011).

Soporte a lenguajes dinámicos

Java es un lenguaje fuertemente tipado, mas no tanto a nivel de bytecode, pero esto es un problema para lenguajes dinámicos como Groovy o Jython, que trabajan sobre la JVM. Para mejorar la integración se introducirá, además de varias clases nuevas, un nuevo bytecode, simplificando la implementación de compiladores dinámicos con una mejor performance.

Strings en switch

Por el momento, en un switch sólo podemos pasar como parámetros tipos de datos byte, short, char, int y enum, pero finalmente podrá aceptar Strings, por lo que será posible hacer

switch (myString) {
    case "uno": <hacer algo>; break;
    case "dos": <hacer otra cosa>; break;
    default: <hacer algo genérico>;
}

Collections y Generics

Hasta ahora, cuando teníamos que instancias una collection, debíamos duplicar el tipo de parámetros

Map<string, List<string>> anagrams = new HashMap<string, List<string>>();

Pero a partir de ahora, el segundo <> será inferido:

Map<string, List<string>> anagrams = new HashMap<();

Además, podrán ser inicializados como los arrays:

List<string> numbers = ["uno", "dos", "tres", "cuatro", "cinco"];

Manejo automático de recursos;

Mediante una mejora en el try, podemos declarar directamente recursos que deban ser cerrados al terminar la ejecución, ahorrándonos tener que cerrarlos manualmente. Lo que hasta ahora es:

BufferedReader br = new BufferedReader(new FileReader(new File("file.txt")));
try {
    br.readLine();
} finally {
    br.close();
}

Directamente será:

static String readFromFile (String file) throws IOException {
    try (BufferedReader reader = new BufferedReader(new FileReader(file)) {
        return reader.readLine();
   }
}

Binarios literales

Con el prefijo 0b podremos directamente representar literales binarios de enteros

int binario = 0b10100010;

Modularización del JDK

A medida que fueron agregando funcionalidades, características, entornos, etc., indudablemente se ha hecho más pesado, tanto en tamaño de descarga, tiempo de carga al inicio y consumo de memoria. El proyecto Jigsaw viene a remediar esta situación, intentando implementar un JDK modular gracias al cual los usuarios podríamos descargar y cargar algunos sólo algunos componentes del JDK que requerramos para correr y desarrollar una determinada aplicación.

Nueva API de I/O

El manejo de I/O será una de las áreas que más cambiará con la séptima versión de Java. Por un lado, se añaden excepciones al manejo de archivos y se mejora el soporte a operaciones como copiado y borrado, permisos, monitoreo de modificaciones, etc. También crearon una interface NetworkChannel que define métodos bind(), getLocalAddress(), getOption() y setOption(). Finalmente, se permitirá que los threads continúen su trabajo paralelamente al trabajo de I/O y sean notificados cuando las operaciones sobre archivos o red terminen de ejecutarse, con canales asíncronos.

Estos son algunos de los cambios, obviamente hay más. Hay varios sencillos que serán muy bienvenidos por el tiempo que ahorrarán al escribir código y otros, como la modularización, los cambios en manejo de archivos, que parecen más importantes. Si bien el JDK 7 será lanzado o a fines del 2010 o a principios del 2011, los que quieran tener un anticipo de los cambios pueden chequear las versiones de prueba de tanto el JDK de Sun Oracle como el desarrollado por IBM (disponible sólamente para Linux y previo registro gratuito).

Vía: IBM