Novedades y propuestas (JSR) en Java 7

Interesante artículo en el blog de Alex Miller (en inglés) describiendo numerosas novedades propuestas (JSR) que se espera sean incorporadas a Java 7 de la mano de Sun. El autor insiste en que, aunque hay algunas propuestas aprobadas, se trata de algo todavía no oficial, por lo que las incorporaciones de Java 7 pueden no corresponderse exactamente con lo propuesto. Al fin y al cabo Java 7 sigue en desarrollo.

A continuación, describiré alguna de estas propuestas, indicando si han sido aprobadas o no (considero algunas no aprobadas muy interesantes) y facilitando enlaces siempre que me sea posible, aunque recomiendo la lectura del artículo original:


JSR 296 Swing Application Framework (JSR, Proyecto) APROBADA

Proporcionar un framework para aplicaciones Swing, definiendo una infraestructura común a la mayoría de aplicaciones de escritorio. El objetivo es que las aplicaciones Swing resulten mas sencillas de crear.


JSR 295 Beans Binding (JSR, Proyecto) NO APROBADA

Proporcionar un API que permita que dos propiedades de dos beans se mantengan sincronizadas, de forma que si cambia una de las propiedades en uno de los beans, automáticamente se refleje en el otro. En JavaFX sí hay algo parecido...


Type Inference (Propuesta) APROBADA

Simplificar la inicialización de algunas clases como listas o mapas. Por ejemplo, donde antes teníamos:

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

Ahora tendremos:

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


Language level XML support NO APROBADA

Permitir introducir XML literal embebido en el código, e incluso otros tipos de texto o lenguajes:
elt.appendChild(
    <muppet>
        <name>Kermit</name>
    </muppet>
);


BigDecimal operator support NO APROBADA

Posibilidad de manipular objetos BigDecimal con operadores aritméticos, como se hace con los tipos primitivos y con muchas de las clases que los representan, como Integer, Long, etc.


Strings in switch statements (Propuesta) SIN DETERMINAR

Posibilidad de utilizar la clase String en una sentencia switch:

static boolean booleanFromString(String s) {
    switch(s) {
        case "true":
            return true;
        case "false":
            return false;
    }
    throw new IllegalArgumentException(s);
}


Comparisons for Enums (Propuesta) SIN DETERMINAR

Permitir operadores lógicos en enumerados:

boolean isRoyalty(Rank rank) {
    return rank >= Rank.JACK && rank != Rank.ACE;
}



Chained invocation (Propuesta) NO APROBADA *

Permitir encadenar fácilmente llamadas a métodos, permitiendo que métodos void devuelvan implícitamente this:

class Factory {
    void setSomething(Something something) { ... }
    void setOther(Other other) { ... }
    Thing result() { ... }
}
...
Thing thing = new Factory()
    .setSomething(something)
    .setOther(other)
    .result();



Extension methods (Propuesta) NO APROBADA *

Permitir utilizar métodos de otras clases utilizando el operador static:

import static java.util.Collections.sort;
List<String> list = ...;
list.sort();
/* Parece que se llama a List.sort(), pero en realidad se está llamando a Collections.sort() */



Enhanced null handling (mi preferida) (Propuesta) APROBADA

Permitir encadenar llamadas a métodos, comprobando automáticamente que los valores devueltos no sean null, lo que provocaría una NullPointerException. Por ejemplo, donde antes teníamos:

public String getPostcode(Person person) {
    if (person != null) {
        Address address = person.getAddress();
        if (address != null) {
            return address.getPostcode();
        }
    }
    return null;
}


Ahora bastará con:

public String getPostcode(Person person) {
    return person?.getAddress()?.getPostcode();
}


Esta misma característica (Propuesta)se podrá utilizar con métodos que pueden devolver null:

String str = getStringMayBeNull();
str = (str == null ? "" : str);


Que pasa a ser:

String str = getStringMayBeNull() ?: "";


Improved catch clause (Propuesta) APROBADA

Poder capturar simultáneamente varios tipos de excepciones:

try {
    return klass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
    throw new AssertionError(e);
}



G1 Garbage Collector (PDF) APROBADA

G1 es un mejorado recolector de basura de Java que divide el espacio en varias regiones determinadas, permitiendo limpiar memoria en un conjunto de dichas regiones, en vez de partir el espacio en partes arbitarias. En el JDK de Sun de Java 7 esté será, en principio, el recolector de basura por defecto.

(*) El estado de aprobación de algunas propuestas aparece en el artículo original con interrogantes. Tal vez, a pesar de no haber sido aprobadas, tienen todavía posibilidades.

A mi me parecen de lo más interesantes (unas más que otras, claro). En el artículo original hay muchas más, pero la entrada se quedaba demasiado larga, tal vez para una próxima... Desconozco las posibilidades que puedan tener muchas de las propuestas no aprobadas de cara al futuro. Habrá que estar pendientes.

Y disculpad si encontrais algún error en las traducciones!

Gracias a C.A. por el apunte :)
Saludos.

1 Comment:

  1. Anónimo said...
    Hola, McQueen...ya sé que usted es un experto en la programación java.
    Quisiera saber su opinion sobre el futuro de la informática tanto a nivel investigador como laboral.
    Sería interesante conocer la opinión de un gran programador como usted.

    Un cordial saludo.

Post a Comment