sábado, 19 de marzo de 2022

Java SE 10/11: Nuevas características para desarrolladores

Bueno ya hicimos en su día los post sobre las características de Java 8 y 9 y ahora vamos por la 10 y 11. La versión 10 fue la última lanzada por Oracle con caracter gratuito. Y la 11 fue la siguiente LTS después de Java 8 y la primera con el nuevo modelo de sistema de licenciamiento. Y de lanzamiento, sacando una nueva versión cada 6 meses. Debido a eso, la versión 10 fue lanzada en Marzo de 2018 y la 11 en Septiembre del mismo año. 

En este post haremos un listado centrado principalmente en las mejoras para desarrolladores. Con la idea de seguir poniéndonos un poco al día y al menos saber manejar las nuevas y más importantes características. Por lo que no entraremos al detalle de mejoras a nivel de rendimiento u otras características menos llamativas.

  • Java 10: Tipo variable local
Ya podemos inicializar una variable sin indicar específicamente de que tipo es. Como si se tratase de un lenguaje de programación no tipado. 

var s = "this is a String object";

Con algunas excepciones, cómo puede ser que solo se declare, que se utilice para almacenar una expresión lambda o para inicializar un array. 

//cannot infer type for local variable
var a;
var b = null;
var c = () -> { };
var d = { 1 , 2 };
  • Java 10: Métodos inmutables
Ahora las interfaces List, Map y Set cuentan con el nuevo método copyOf que permite la creación de copias de listas que a la vez son inmutables. Y el método toUnmodifiableList/Map/Set en la interfaz Collectors.

List<String> numbers = new ArrayList<>();
numbers.add("one");
List<String> copy = List.copyOf(numbers);
numbers.add("two");
//copy.add("three"); // throw java.lang.UnsupportedOperationException
copy.forEach(System.out::println); //only prints one
List<String> collect = numbers.stream().collect(Collectors.toUnmodifiableList());
collect.forEach(System.out::println); // prints one two
//collect.add("three");// throw java.lang.UnsupportedOperationException
  • Java 10: Nuevo método de Optional
Ahora existe el nuevo método orElseThrow() que es exactamente igual que get() pero con un nombre más aclarativo.

String str = "str";
Optional<String> opt = Optional.ofNullable(str);
System.out.println(opt.orElseThrow()); // same as opt.get()
  • Java 10: Certificados por defecto
Ahora las versiones de Oracle y Open JDK vendrán con un conjunto por defecto de certificados de entidades de confianza. Acabando de camino con los problemas de TLS al utilizar OpenJDK. 
  • Java 10: Nuevo versionado de los release en base al Tiempo 
$ java -version
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)
    • Java 11: Nuevos métodos de String
    Se han incorporado nuevos métodos de utilidad en la propia clase String. strip() es una mejora de trim().

    System.out.println(" ".isBlank()); //true
    
    String lines = "one\nsecond\nthird";
    System.out.println(lines.lines().collect(Collectors.toList())); //[one, second, third]
    
    String str = "  str  ";
    System.out.println("-"+str.strip()+"-"); // print -str-
    System.out.println("-"+str.stripLeading()+"-"); // print -str  -
    System.out.println("-"+str.stripTrailing()+"-"); // print -  str-
    
    System.out.println("2".repeat(2)); //22
    • Java 11: Var en expresiones Lambdas
    Ya indicábamos arriba, que una de las grandes características de Java 10 como era la sintaxis de variable local. Ahora podremos utilizarlas en las lambdas. 

    Map<String, Integer> map = new HashMap<>();
    map.put("2", 2);
    map.forEach((final var x, final var y) -> System.out.println(x+y)); // prints 22
    
    • Java 11: Facilitar la lectura y escritura de String en ficheros
    Se han creado los métodos readString writeString que lo permiten

    Path filePath = Files.writeString(Paths.get("tmp.txt"), "Sample text");
    String fileContent = Files.readString(filePath);
    System.out.println(fileContent.equals("Sample text")); // prints true
    • Miembros anidados
    A partir de ahora se incorpora los conceptos de netmates y mejora el acceso entre estos.
    • Java 11: Estandarización de HTTPClient
    Introducido en Java SE 9 ahora se convierte en un standard.
    • Java 11: Compilar y ejecutar clases con un único comando
    java HelloWorld.java
    • Java 11: Eliminación de módulos de Java EE y CORBA 
    Ya fueron deprecados en Java SE 9 y ahora han sido eliminados: java.xml.ws, java.xml.bind, java.activation, java.xml.ws.annotation, java.corba, java.transaction, java.se.ee, jdk.xml.ws, jdk.xml.bind.


    Si quieres ver todas las especificaciones de Java 10 SE puedes verlas aquí y las de Java SE 11 aquí.

    No hay comentarios:

    Publicar un comentario