Langage : Numeric literals : long amount = 1_234_567L; Diamond operator : List<String> list = new ArrayList <>(); String-in-switch : case " Monday ": … Try-with-resources : try ( InputStream is = …) { … } Multi catch : catch ( IOException | MyException e) { … } API : Mises à jour de JAXP, JAXB, JAX-WS New IO 2 : manipulations de fichiers et répertoires, WatchService , etc. Fork/ join : parallélisation de taches InvokeDynamic : appels de langages tiers Support Unicode 6 Améliorations Swing : Nimbus L&F, transparence, etc. JDBC 4.1 qui supporte try-with-resources Résumé des nouveautés de Java 7
Java 8
Langage : Méthodes par défaut et statiques dans les interfaces Références de méthode Expressions lambda Annotations de type API Date and time API Interfaces fonctionnelles Stream API Améliorations dans la gestion de concurrence Nashorn , un nouveau moteur JavaScript Unicode 6.2, JDBC 4.2, JAXP 1.6, etc. Base 64 encoder et decoder Vue d’ensemble
Date and time API
Méthodes par défaut et méthodes statiques Interfaces
Annotée @ FunctionalInterface et avec une seule méthode abstraite Interfaces fonctionnelles (1/3)
Exemples de fonctions dans java.util.function : Interfaces fonctionnelles (2/3) Interface Entrées Sortie Consumer<T> T Supplier<T> T Predicate <T> T boolean Function <T, R> T R IntFunction <R> int R BiFunction <T, U, R> T, U R
Interfaces fonctionnelles ( 3 /3)
Références de méthode (1/2)
Cas d’usage : Références de méthode (2/2)
Format : ( [type1] arg1, [type2] arg2...) -> { body } Expressions lambda
Pour traiter des séquences d’éléments Streams
Pour aplatir des collections : { { « A », « B »}, { }, {« C »} } => { « A », « B », « C » } flatMap
API fonctionnelle pour gérer null Optional (1/2)
Itérer sur des optional Optional (2/2)
Définition : Utilisation : Cas d’usages : Lisibilité du code Supporté par la R eflection API, e.g .: field.getAnnotatedType () Exploitable via Java Annotation Processor comme Checker Framework Annotation de types
Interpréteur JavaScript, remplace Rhino de Java 6 Ligne de commande « jjs » ou API Nashorn
Adder , somme cumulée performante Accumulator , généralisation de l' Adder Adders et accumulators
StampedLock (1/2) synchronized s ynchronized (W) et volatile ReentrantLock ReentrantRWLock StampedLock Simplicité Bonnes perfs en lecture Ajout de fonctionnalités ( timed wait , try lock, etc.) Bonnes perfs en lecture Bonnes perfs, fonctionnalités (upgrade de lock R en W, etc.) Fonctionnalités
StampedLock (2/2)
Execution dans le ForkJoinPool commun Parallélisme du ForkJoinPool commun : Property - Djava.util.concurrent.ForkJoinPool.common.parallelism =7 Sinon Runtime.getRuntime (). availableProcessors () - 1 Le thread courant aussi est utilisé Ou dans un ForkJoinPool custom Parallel streams (1/2)
Pas toujours plus performant, varie suivant : Type de collection : ArrayList plutôt que LinkedList Nature du traitement Taille de "N*Q" (nb d'élément * cout par élément) Nombre de cœurs, il faut > 1 Mesurer les deux Par défaut utilisent tous le ForkJoinPool commun Attention aux lambdas stateful Parallel streams (2/2)
Classe qui implémente Future Pour combiner/chainer des actions CompletableFuture
Divers
Java 9
P rojet « Jigsaw » Identification explicite des dépendances Séparation des composants publics vs privés Réduction de la taille de du JDK pour certains systèmes Modularisation du JDK en 85 modules Java Platform Module System
HttpClient : client HTTP/2 sync ou async Collections : Processus : API (1/2)
REPL ( Read- Evaluate - Print -Loop ) en ligne de commande JShell
JMH, Java Microbenchmark Harness
Doc « cherchable » : Garbage collector : « G1 » par défaut Changements dans les flags mémoire Nouveau format de log Support Unicode 7.0 et 8.0 Nouveau renderer 2D, Marlin Amélioration du stockage des String Nouvelle structure des fichiers de JDK/JRE Etc… Divers