A logo showing the text blog.marcnuri.com
English
Inicio»Java»Java 10: Probando las nuevas funcionalidades

Entradas Recientes

  • Fabric8 Kubernetes Client 6.5.0 está disponible!
  • Fabric8 Kubernetes Client 6.4.1 está disponible!
  • Fabric8 Kubernetes Client 6.3.1 está disponible!
  • Eclipse JKube 1.10 está disponible!
  • Fabric8 Kubernetes Client 6.2.0 está disponible!

Categorías

  • Antiguo
  • Front-end
  • Herramientas
  • Java
  • JavaScript
  • Operaciones
  • Proyectos personales

Archivos

  • marzo 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • agosto 2022
  • julio 2022
  • mayo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • diciembre 2020
  • octubre 2020
  • agosto 2020
  • mayo 2020
  • marzo 2020
  • noviembre 2019
  • octubre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • julio 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • marzo 2007

Java 10: Probando las nuevas funcionalidades

2018-03-31 en Java / Antiguo etiquetado Java / Java 10 por Marc Nuri | Última actualización: 2021-03-21
English version

Introducción

Como probablemente ya sabrás, Java 10 se liberó el pasado 20 de marzo siguiendo el nuevo programa para liberar versiones cada 6 meses. Esta versión viene tras el lanzamiento de Java 9 el pasado septiembre de 2017 y deja esta última version obsoleta.

Java 11 se liberará como una versión de soporte prolongado (LTS) y tendrá un periodo de vida mucho más amplio, pero hasta entonces, veamos cuáles son algunas de las nueva funcionalidades en Java 10.

Versionado de lanzamientos basado en tiempo

Java 10 introduce el nuevo versionado basado en tiempo (JEP 322) que es una reestructuración de JEP 223 liberado en Java 9 para permitir el nuevo modelo de lanzamientos. De ahora en adelante los números de versión seguirán este patrón:
$FEATURE.$INTERIM.$UPDATE.$PATCH
Cada 6 meses una nueva versión de funcionalidad (feature release) se liberará, cada 3 años (comenzando en septiembre de 2018) la versión de funcionalidad será de soporte prolongado (LTS).

new JDK Release model

Inferencia en el tipo de variables locales

Java 10 incluye varias funcionalidades nuevas, aunque de todas ellas, probablemente la más aparente para la mayoría de nosotros es JEP 286: Local-Variable Type Inference. Esta funcionalidad mejora la experiencia de desarrollo al eliminar el código adicional, necesario hasta ahora, para declarar variables locales expresando el tipado completo de la variable.

1var shouldBeString = "Hello Java 10";
2assertTrue(String.class.isInstance(shouldBeString));

De ahora en adelante las variables locales podrán declararse empleando la palabra reservada var, la seguridad de tipado se preservará ya que el tipo de la variable se determinará en el momento en el que se le asigne un valor por primera vez.

De este modo, el siguiente código dará un error de compilación:

Local-variable type inference
Local-variable type inference

Otras funcionalidades incluidas en esta versión

  • 296: Consolidate the JDK Forest into a Single Repository (Consolidar la maraña del JDK en un único repositorio)
  • 304: Garbage-Collector Interface (Interfaz para el “Recolector de basura”)
  • 307: Parallel Full GC for G1 (“Recolección de basura” en paralelo para G1)
  • 310: Application Class-Data Sharing (Permitir classes de aplicación en “Class-Data Sharing (CDS)”)
  • 312: Thread-Local Handshakes
  • 313: Remove the Native-Header Generation Tool (javah) (Eliminar la herramienta javah del JDK)
  • 314: Additional Unicode Language-Tag Extensions (Extensiones Unicode Language-Tag adicionales)
  • 316: Heap Allocation on Alternative Memory Devices (Asignación de Heap en dispositivos de memoria alternativos)
  • 317: Experimental Java-Based JIT Compiler (Compilador Java JIT experimental)
  • 319: Root Certificates (Certificados Raíz)

Mejoras en esta versión

Método Optional.orElseThrow()

Se ha creado un método adicional orElseThrow() en la clase Optional para reemplazar el método estándar get() ya que el nombre de éste era confuso y los desarrolladores podrían no esperarse que un “getter” lanzase una excepción. A partir de ahora ésta será la alternativa recomendada, en futuras versiones el método get() se marcará como obsoleto.

1final Optional<String> optional = Optional.ofNullable("Optional improvement in Java 10");
2final String string = optional.orElseThrow(); // Returns OK
3final Optional<String> optional = Optional.ofNullable(null);
4final String string = optional.orElseThrow(); // Throws NoSuchElementException

Collectors inmodificables

Nuevos métodos toUnmodifiableList(), toUnmodifiableSet() y toUnmodifiableMap() se han añadido a la clase Collectors para facilitar la creación de colecciones inmodifcables.

1Stream.of(1, 2, 3).collect(Collectors.toUnmodifiableSet());
2Stream.of(1, 2, 3).collect(Collectors.toUnmodifiableList());
3Stream.of(1, 2, 3).collect(Collectors.toUnmodifiableMap(Function.identity(), Function.identity()));

Sourcecode

El código fuente completo de este artículo con tests para las nuevas funcionalidades y mejoras puede encontrarse en GitHub.

Java 10
Java 10
Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos

← Spring Bean Scopes: Singleton con PrototypesJava 8 Streams: Convertir List en Map →
© 2007 - 2023 Marc Nuri