2. AGENDA
1. INFÉRENCE DE TYPE POUR LES ARGUMENTS DES EXPRESSIONS LAMBDA
2. LANCEMENT SIMPLIFIÉ DE PROGRAMMES À FICHIER UNIQUE
3. EVOLUTION DE L’API HTTP CLIENT
4. QUELQUES APIS
5. GESTION DE LA VISIBILITÉ DES ATTRIBUTS DES CLASSES IMBRIQUÉES
6. DYNAMIC CLASS-FILE CONSTANTS
7. LE GARBAGE COLLECTOR EPSILON
8. UNICODE 10
9. SUPPRESION DES MODULES
3. INTRODUCTION
• JAVA 11, SORTI EN SEPTEMBRE 2018, EST UNE NOUVEAUTÉ MAJEURE DU LANGAGE JAVA EN CE QU’ELLE
CONSTITUE UNE VERSION LTS (LONG TIME SUPPORT) QUI SERA SOUTENUE PAR ORACLE JUSQU’EN 2023 –
ET MÊME AU-DELÀ SI ON SOUHAITE BÉNÉFICIER D’UN SUPPORT ÉTENDU. DE CE FAIT, JAVA 11 APPARAÎT
COMME UNE VERSION INCONTOURNABLE À L’HORIZON DES PROCHAINES ANNÉES. DANS CET ARTICLE, JE
VOUS PROPOSE DE VOUS FAMILIARISER AVEC UNE SÉLECTION DE 9 NOUVEAUTÉS CONTENUES DANS LE
JDK 11.
4. INFÉRENCE DE TYPE POUR LES ARGUMENTS
DES EXPRESSIONS LAMBDA
Evolution Syntaxe
La référence de type des variables
ajoutée avec Java 8
Function<Integer, Integer> cube = (Integer x) -> x * x * x;
l’inférence de type des variables
ajoutée avec Java 11
Function<Integer, Integer> cube = (var x) -> x * x * x;
Omettre un type pour les paramètres
des lambdas
Function<Integer, Integer> cube = (x) -> x * x * x;
Exemple list.stream().map((@NotNull var s) -> s.toUpperCase());
5. LANCEMENT SIMPLIFIÉ DE PROGRAMMES À
FICHIER UNIQUE
Evolution
Syntaxe
Avant Java 11, pour lancer le traditionnel
HelloWorld.java, on exécutait :
javac -d <memory> HelloWorld.java
java -cp <memory>
avec Java 11, on pourra directement lancer des
applications contenues dans un seul fichier
java HelloWorld.java (*)
(*) Cette fonctionnalité, en complément de JShell, complète les outils à dispositions des développeurs
débutants et permet également à Oracle de faire évoluer Java vers un langage plus léger à
exécuter.
6. EVOLUTION DE L’API HTTP CLIENT
• AMÉLIORATION DU PACKAGE JAVA.NET.HTTP
Evolution Package Syntaxe
HTTPCLIENT
(java 9)
jdk.incubator.httpclient Ne fonctionne qu’en mode synchrone
HTTP/1.1 and HTTP/2
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.getDefault()).build();
HTTPCLIENT
(java 11)
java.net.http fonctionne en 2 modes (A)synchrone:
private static final HttpClient HTTP_CLIENT =
HttpClient.newBuilder().build();
Le nom du module et du package de l’API est désormais
java.net.http.
7. QUELQUES APIS
Evolution package syntaxe
Evolution « String » java.lang.String boolean isBlank(): retourne true si le String est vide ou n’est composé que de whitespaces, sinon false.
Stream lines(): retourne un stream des lignes extraites du String.
String repeat(int): retourne un String qui est le String d’origine concaténé avec lui-même n fois.
String strip(): retourne un String débarrassé de ses trailing et leading whitespaces. Pour faire simple,
strip() est la version «Unicode-aware » de trim() dont la définition du whitespace date des premières
versions de Java.
String stripLeading(): retourne un String débarrassé de ses leading whitespaces.
String stripTrailing(): retourne un String débarrassé de ses trailing whitespaces
Evolution « function » java.util.function.Predicate Predicate not(Predicate). Retourne un Predicate qui est la négation du Predicate passé en argument.
Exemple pour list.stream().filter(Predicate.not(String::isBlank));
java.lang.CharSequence: int compare(CharSequence, CharSequence): compare deux instances de
CharSequence en suivant l’ordre lexicographique. Retourne une valeur negative, nulle ou positive.
java.lang.StringBuffer / java.lang.StringBuilder: Ces deux classes ont désormais accès à une nouvelle
méthode compareTo() qui prend en argument un StringBuffer/StringBuilder et retourne un int. La
logique de comparaison suit le même ordre lexicographique que pour la nouvelle méthode de la classe
CharSequence
Evolution « math » Java.lang.Math sin (sine trigonometric function)
cos (cosine trigonometric function)
log (logarithm of a number)
Evolution »facilite la conversion to
array »
Java.util.Collection
Collection.toArray (Function <T []>).
Evolution »facilite la lecture et
l'écriture de fichiers »
java.nio.file.Files
Files.readString(Path)
Files.writeString(Path, CharSequence, OpenOption)
8. GESTION DE LA VISIBILITÉ DES ATTRIBUTS
DES CLASSES IMBRIQUÉES
Evolution Package Syntaxe
Evolution « visibilités des
classes nested »
Java.lang.class • Ajout des getters sur les classes imbriqées (Nested)
public class NestingClass {
private int nestingInt;
class NestedClass {
public void printNestingInt(){
System.out.println("Nesting Int = " + nestingInt);
}
}
}
Ajout de 3 méthodes Java.lang.class Class getNestHost()
Class[] getNestMembers()
boolean isNestmateof(Class)
9. DYNAMIC CLASS-FILE CONSTANTS
Evolution Package Syntaxe
Ajout d’un constante
dynamique
java.lang.invoke.Constant
Bootstraps
public static VarHandle arrayVarHandle(Lookup lookup, String name,
Class<java.lang.invoke.VarHandle> type, Class<?> arrayClass )
public static VarHandle fieldVarHandle( Lookup lookup, String name,
Class<java.lang.invoke.VarHandle> type, Class<?> declaringClass, Class<?> fieldType )
public static Object getStaticFinal( Lookup lookup, String name, Class<?> type, Class<?>
declaringClass )
public static Object getStaticFinal( Lookup lookup, String name, Class<?> type )
public static Object invoke( Lookup lookup, String name, Class<?> type, MethodHandle
handle, Object[] args )
public static Object nullConstant( Lookup lookup, String name, Class<?> type )
public static Class<?> primitiveClass( Lookup lookup, String name, Class<?> type )
public static VarHandle staticFieldVarHandle( Lookup lookup, String name,
Class<java.lang.invoke.VarHandle> type, Class<?> declaringClass, Class<?> fieldType )
Ajout d’un constante
dynamique
java.lang.invoke.Constant
Bootstraps
10. LE GARBAGE COLLECTOR EPSILON
• JAVA 7 A INTRODUIT GARBAGEFIRST (G1). ELLE EST ENSUITE DEVENUE LA RAMASSE-MIETTES PAR DÉFAUT
AVEC JAVA 9. G1 EST OPTIMISÉE POUR UNE PROBABILITÉ ET UN DÉBIT ÉLEVÉS. COMME INDIQUÉ PAR
THOMAS SCHATZL, JAVA 11 AMÉLIORE LES TEMPS DE PAUSE DE PRÈS DE 60% SUR LES PROCESSEURS X64
AVEC UN ENCOMBREMENT MÉMOIRE TRÈS RÉDUIT.
• DE PLUS, CETTE VERSION DE JAVA INTRODUITE DEUX RAMASSE-MIETTES EXPÉRIMENTALES :
• Z GARBAGE COLLECTOR (ZGC)
• ET EPSILON
11. UNICODE 10
• Le JDK 11 a pris note de l'arrivée d'Unicode 10, et prend donc en charge la nouvelle
version de cette norme.
• Cette version comprend 8 518 nouveaux symboles (du Bitcoin aux emojis en passant
par les signes traditionnels chinois, arabes ou bouddhistes) que vous pouvez utiliser
avec Java 11
12. SUPPRESION DES MODULES
Evolution Module Statut
Suppression de modules corba
transaction
activation
xml.bind
xml.ws
xml.ws.annotation
Removed