lunes, 23 de marzo de 2020

Java SE 9: Nuevas caracteristicas

Bueno ya hicimos en su dia los post sobre las caracteristicas de Java 8 y ahora vamos por la 9. Esta se lanzo en Septiembre de 2017, pero tras el cambio de politica de Oracle y el lanzamiento de una nueva JDK cada 6 meses, parece que fue hace mas tiempo. 

En este post haremos un listado mas generico de las nuevas caracteristicas y en posteriores posts entraremos en las cualidades mas importantes como pueden ser los Reactive Streams. 
  • Sistema modularizable
Puede que la gran novedad, sea el sistema modularizable proveniente del proyecto Jigsaw. El cual provee capacidades parecidas a las del framework OSGI, del cual ya hemos hablado anteriormente. 

La idea principal, es que podamos reducir la cantidad de clases que se cargan normalmente, reduciendo a la misma vez el consumo de memoria. Esto lo podremos hacer cargando módulos, es decir paquetes concretos de clases. Los cuales además permiten que esten disponibles solo las APIs o interfaces, dejando las implementaciones ocultas. Además nosotros también podremos crear nuestros propios módulos
  • JShell
Esta nueva herramienta, es basicamente una consola REPL (Read-Eval-Print-Loop). La cual nos permite ejecutar codigo Java directamente, sin necesidad de crear clases o el famoso metodo main. 
  • Constructores basados en el patron Factory para implementaciones inmutables de Collection
Ya existian los metodos que nos permitian crear un Collection inmutable. Ahora lo que han hecho es modificar el nombre de dicho m'etodo para hacerlo aun mas legible.

List immutableList = List.of("one","two","three");
  • Métodos privados en interfaces
Ya en Java 8 podiamos crear métodos estáticos o de tipo por defecto en las interfaces. Pero ahora además podemos crear métodos privados. Pudiendo crear múltiples métodos y constantes

public interface SampleInterface {
 String constante = "constant value";
        abstract void abstractMethod();
 default void defaultMethod() {
        // TODO 
 }
 private void privateMethod() {
  // TODO
 }
        private static void privateStaticMethod() {
  // TODO
 }
}
  • Nueva API HTTP
Se han creado dos nuevas clases que nos dan acceso a los processos de nuestro SO: java.lang.ProcessHandle y java.lang.ProcessHandle.Info. Los cuales nos permitirán obtener información de ellos o incluso destruirlos. 
  • Mejoras en Try-With-Resources
Ya en Java SE7 se crearon los try-with-resources que permiten cerrar los objetos que implementan autocloseable. Pero ahora se ha mejorado la forma en que se utilizan, no siendo necesario crear la instancia en el mismo try-with-resources.

// Java SE 7
try (CloseableHttpClient httpClient = createAcceptSelfSignedCertificateClient()) {
    HttpResponse response = httpClient.execute(post);
    code = response.getStatusLine().getStatusCode();
}
// Java SE 9
CloseableHttpClient httpClient = createAcceptSelfSignedCertificateClient()
try (httpClient) {
    HttpResponse response = httpClient.execute(post);
    code = response.getStatusLine().getStatusCode();
}
  • Process API
Se han creado dos nuevas clases que nos dan acceso a los processos de nuestro SO: java.lang.ProcessHandle y java.lang.ProcessHandle.Info.
  • Stream API y en la clase Optional
Habiendo ahora nuevos métodos a usar con los stream, como son dropWhile, takeWhile, ofNullable e iterate. dropWhile y takeWhile nos permitirán obtener un subconjunto de elementos de un stream en función de un Predicate dado. 

Además Optional ahora también nos permite usar el método stream().

  • Operador diamante en clases anónimas internas
En Java SE 7, se introdujieron los operadores diamantes. Los que nos permiten indicar si una lista contiene objetos de un tipo u otro. Pero estos han dado problemas en las clases de tipo anónimo. Por tanto para evitar estos problemas, ya no es necesario el uso de operadores diamente en la clases anónimas. 

No hay comentarios:

Publicar un comentario