Les fonctionnalités de Java 16

Java approche de sa prochaine version de support à long terme (LTS).

Mais intéressons nous un peu à Java 16 (aussi disponible en production) et ses nouvelles fonctionnalités, sorti en Mars 2021.

Record

Record est un moyen simplifié de déclarer une classe qui est utilisée uniquement pour représenter des données.
Ce type de classe est défini comme des objets de transfert de données (DTO) ou des entités dans les cadres ORM pour représenter une des tables.

La façon actuelle de déclarer ce type de classes est de créer une classe publique avec des propriétés et tous les constructeurs d’arguments et de définir tous les getters/setters avec les méthodes equals, hashCode et toString.

Cela nécessite “beaucoup” de code supplémentaire qui peut être réduit à l’aide de libs de génération de code et de plugins tel que Lombok, mais c’est toujours un problème.

Java 16 introduit donc le type d’enregistrement “record type” pour faciliter la création de telles classes.

Sans Record :

public class Unicorn {

    private final String name;
    private final int age;
    
    public Unicorn(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Unicorn unicorn = (Unicorn) o;
        return age == unicorn.age && Objects.equals(name, unicorn.name);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
    
    @Override
    public String toString() {
        return "Unicorn{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Avec Record, attention, tenez vous bien :

public record Unicorn (String name, int age) {}

Et un exemple d’utilisation de Record :

public class Unicorn {
    public static void main(String[] args) {
        Unicorn unicorn = new Unicorn("Giselle", 350);
        System.out.println(unicorn.name());
        System.out.println(unicorn.age());
        System.out.println(unicorn);
    }
}

Magique non ? Gain de temps, et gain de lisibilité, merci Java, merci Record.

Nouvelles méthodes dans l’API Stream :

Il existe plusieurs nouvelles méthodes introduites dans l’API Stream qui peuvent être utilisées pour augmenter les performances et réduire le code passe-partout.
J’appel la méthode .. Stream.toList() !

Avant :

stream.collect(Collectors.toList())

Maintenant :

stream.toList()

Tout simplement.
Cette méthode réduit le besoin d’appeler la méthode collect() lorsqu’il est nécessaire d’agréger les valeurs d’un flux dans une liste.

 

Quelques autres nouveautés du JDK 16 :

  • JEP 347 – Autorise les fonctionnalités du langage C++14 (dans le code source du JDK)
  • JEP 357 – Migration de Mercurial vers Git
  • JEP 369 – Migration vers GitHub
  • JEP 376 – ZGC : traitement simultané de la pile de threads
  • JEP 380 – Canaux de sockets du domaine UNIX
  • JEP 386 – Portage Alpine Linux
  • JEP 387 – Méta-espace élastique
  • JEP 388 – Portage Windows/Aarch64
  • JEP 390 – Avertissements pour les classes basées sur des valeurs
  • JEP 396 – Encapsulation par défaut des éléments internes du JDK
  • JEP 397 – Classes scellées (deuxième préversion)

 

 

1 réflexion sur “Les fonctionnalités de Java 16”

  1. Ping : String Builder en Java

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut
%d blogueurs aiment cette page :