218
29/10/2015 1 Formation Java8 Formation Les nouveautés Java 8 alphorm.com™© Site : http://www.alphorm.com Blog : http://blog.alphorm.com Forum : http://forum.alphorm.com Fabien Brissonneau Consultant, concepteur et formateur Objets Logiciels

Alphorm.com Java 8: les nouveautés

  • Upload
    alphorm

  • View
    8.476

  • Download
    12

Embed Size (px)

Citation preview

Page 1: Alphorm.com Java 8: les nouveautés

29/10/2015

1

Formation Java8

Formation Les nouveautés Java 8 alphorm.com™©

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 2: Alphorm.com Java 8: les nouveautés

29/10/2015

2

Plan

• Présentation de votre formateur

• Qu’est ce que c’est Java8 ?

• Présentation de votre formation

• Le plan de la formation

Formation Les nouveautés Java 8 alphorm.com™©

• Publics concernés

• Prérequis de la formation

Page 3: Alphorm.com Java 8: les nouveautés

29/10/2015

3

Présentation du formateur• Fabien Brissonneau

• Email : [email protected]

• Consultant Concepteur et Formateur

• Missions d’architecture, de conception , de réalisation logicielles

• Fondateur de eiXa6

Formation Les nouveautés Java 8 alphorm.com™©

• Actuellement en mission sur un projet de gestion

• Mes références :

� Mon profil Viadeo : http://fr.viadeo.com/fr/profile/fabien.brissonneau

� Mon profil LinkedIn : http://fr.linkedin.com/pub/fabien-brissonneau/65/902/92a/

� Mon profil Alphorm : http://www.alphorm.com/formateur/fabien-brissonneau

Page 4: Alphorm.com Java 8: les nouveautés

29/10/2015

4

Mes formations sur alphorm

Formation Les nouveautés Java 8 alphorm.com™©

Page 5: Alphorm.com Java 8: les nouveautés

29/10/2015

5

Qu’est-ce que Java8?

• La nouvelle version de Java8 sortie en 2014

• Une révolution dans la syntaxe

• L’apparition de nouveau concepts

• Une nouvelle façon de programmer en Java ?

Formation Les nouveautés Java 8 alphorm.com™©

Page 6: Alphorm.com Java 8: les nouveautés

29/10/2015

6

Plan de la formation

• La nouvelle syntaxe

• Les interfaces fonctionnelles

• Le langage

• Les streams

• Les collections

• Les outils

• JavaFX

Formation Les nouveautés Java 8 alphorm.com™©

• Les dates et l’internationalisation

• Concurrence et réseau

Page 7: Alphorm.com Java 8: les nouveautés

29/10/2015

7

Publics concernés

• Cette formation s’adresse à des développeurs

• Connaître Java est nécessaire, ne pas être dérouté par sa syntaxe

• Nous ne reviendrons pas sur les concepts du langage

Formation Les nouveautés Java 8 alphorm.com™©

Page 8: Alphorm.com Java 8: les nouveautés

29/10/2015

8

Prérequis de la formation

• Savoir lire du code Java

• Avoir des rudiments sur les interfaces graphiques

• Et … du courage comme toujours !

Formation Les nouveautés Java 8 alphorm.com™©

Page 9: Alphorm.com Java 8: les nouveautés

29/10/2015

9

Les outils nécessaires

• Le SDK Java8

• L’outil Netbeans est utilisé en interface de développement

• La présentation sera faite sous Windows 8

Formation Les nouveautés Java 8 alphorm.com™©

Page 10: Alphorm.com Java 8: les nouveautés

29/10/2015

10

Les autres formations dév sur Alphorm

Formation Les nouveautés Java 8 alphorm.com™©

Page 11: Alphorm.com Java 8: les nouveautés

29/10/2015

11

Are you ready ? ☺

Formation Les nouveautés Java 8 alphorm.com™©

Page 12: Alphorm.com Java 8: les nouveautés

29/10/2015

12

Expressions lambdas

La nouvelle syntaxe

Formation Les nouveautés Java 8 alphorm.com™©

Expressions lambdas

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 13: Alphorm.com Java 8: les nouveautés

29/10/2015

13

Plan

• La syntaxe des expressions lambdas

• Usage des expressions lambdas

Formation Les nouveautés Java 8 alphorm.com™©

Page 14: Alphorm.com Java 8: les nouveautés

29/10/2015

14

La syntaxe des expressions lambdas

• La liste des paramètres

� Le type est optionnel

� Les parenthèses peuvent être omises

• La ->

• Le corps de la fonction

Formation Les nouveautés Java 8 alphorm.com™©

• Le corps de la fonction

� Sans {} s’il y a une seule expression

� Avec {} sinon

Page 15: Alphorm.com Java 8: les nouveautés

29/10/2015

15

Usage des expressions lambdas

• Le besoin d’expressions courtes

• L’expression de prédicat

� Une fonction courte qui retourne true ou false

• La fourniture d’un consommateur

Formation Les nouveautés Java 8 alphorm.com™©

� Une fonction qui accept une donnée

Page 16: Alphorm.com Java 8: les nouveautés

29/10/2015

16

Ce qu’on a couvert

• La syntaxe des expressions lambdas

• Usage des expressions lambdas

Formation Les nouveautés Java 8 alphorm.com™©

Page 17: Alphorm.com Java 8: les nouveautés

29/10/2015

17

EL et classes

La nouvelle syntaxe

Formation Les nouveautés Java 8 alphorm.com™©

EL et classes anonymes

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 18: Alphorm.com Java 8: les nouveautés

29/10/2015

18

Plan

• Créer une fonction de rappel

• Créer une classe anonyme

• Utiliser une expression lambda

Formation Les nouveautés Java 8 alphorm.com™©

Page 19: Alphorm.com Java 8: les nouveautés

29/10/2015

19

Créer une fonction de rappel

• En Java, on ne peut pas créer une fonction en dehors d’une classe

• Parfois, nous avons besoin du seul traitement

• Il faut créer alors une classe pour profiter de ses seules fonctions

Formation Les nouveautés Java 8 alphorm.com™©

Page 20: Alphorm.com Java 8: les nouveautés

29/10/2015

20

Créer une classe anomyne

• Une classe anonyme est une classe interne

• Nous nous débarrassons de l’obligation de déclarer une classe

• La classe anonyme a un accès privilégié à la classe englobante

Formation Les nouveautés Java 8 alphorm.com™©

Page 21: Alphorm.com Java 8: les nouveautés

29/10/2015

21

Utiliser une expression lambda

• La plus courte des expressions

• Pas de classe à déclarer

• Focalisée sur le traitement à mettre en place

• Correspond à une interface à une seule méthode

Formation Les nouveautés Java 8 alphorm.com™©

Page 22: Alphorm.com Java 8: les nouveautés

29/10/2015

22

Ce qu’on a couvert

• Créer une fonction de rappel

• Créer une classe anonyme

• Utiliser une expression lambda

Formation Les nouveautés Java 8 alphorm.com™©

Page 23: Alphorm.com Java 8: les nouveautés

29/10/2015

23

Les limites des

La nouvelle syntaxe

Formation Les nouveautés Java 8 alphorm.com™©

Les limites des expressions lambdas

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 24: Alphorm.com Java 8: les nouveautés

29/10/2015

24

Plan

• Les variables locales

• Les captures

Formation Les nouveautés Java 8 alphorm.com™©

Page 25: Alphorm.com Java 8: les nouveautés

29/10/2015

25

Les variables locales

• Les variables d’une expression lambda n’ont pas d’espace propre

• Les collisions sont donc fréquentes

Formation Les nouveautés Java 8 alphorm.com™©

Page 26: Alphorm.com Java 8: les nouveautés

29/10/2015

26

Les captures

• Une expression lambda accède

• Aux variables locales

• Aux variables attributs de la classe

Formation Les nouveautés Java 8 alphorm.com™©

Page 27: Alphorm.com Java 8: les nouveautés

29/10/2015

27

Ce qu’on a couvert

• Les variables locales

• Les captures

Formation Les nouveautés Java 8 alphorm.com™©

Page 28: Alphorm.com Java 8: les nouveautés

29/10/2015

28

Les méthodes par

La nouvelle syntaxe

Formation Les nouveautés Java 8 alphorm.com™©

Les méthodes par défaut des interfaces

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 29: Alphorm.com Java 8: les nouveautés

29/10/2015

29

Plan

• Les problèmes

• Les méthodes par défaut

Formation Les nouveautés Java 8 alphorm.com™©

Page 30: Alphorm.com Java 8: les nouveautés

29/10/2015

30

Les problèmes

• Une interface peut déclarer plusieurs méthodes

• Une classe qui implémente une interface doit fournir un corps de méthode pour chaque méthode de l’interface

• Une interface propose parfois des méthodes qui n’intéressent pas la classe fille

Formation Les nouveautés Java 8 alphorm.com™©

Page 31: Alphorm.com Java 8: les nouveautés

29/10/2015

31

Les méthodes par défaut

• Une implémentation fournit dans l’interface

• Pas obligatoire de la redéfinir

• Devrait correspondre à un traitement vrai pour toutes les implémentations de cette interface

Formation Les nouveautés Java 8 alphorm.com™©

Page 32: Alphorm.com Java 8: les nouveautés

29/10/2015

32

Ce qu’on a couvert

• Les problèmes

• Les méthodes par défaut

Formation Les nouveautés Java 8 alphorm.com™©

Page 33: Alphorm.com Java 8: les nouveautés

29/10/2015

33

Les références de

La nouvelle syntaxe

Formation Les nouveautés Java 8 alphorm.com™©

Les références de méthodes

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 34: Alphorm.com Java 8: les nouveautés

29/10/2015

34

Plan

• Le problème

• La solution nouvelle

Formation Les nouveautés Java 8 alphorm.com™©

Page 35: Alphorm.com Java 8: les nouveautés

29/10/2015

35

Le problème

• En Java, les adresses de variables ou de fonctions ne sont pas manipulables

• Avant la version 8, les méthodes ne sont donc pas référençables

� Contrairement aux objets, instanciés

• Pour déclencher une méthode particulière, il faut référencer un objet

Formation Les nouveautés Java 8 alphorm.com™©

• Pour déclencher une méthode particulière, il faut référencer un objet

• D’où l’obligation de fournir un objet pour déclencher dessus une méthode

Page 36: Alphorm.com Java 8: les nouveautés

29/10/2015

36

La solution nouvelle

• Il est possible de référencer une méthode

• Conforme à une signature particulière

• Peut être une méthode d’instance ou une méthode statique

Formation Les nouveautés Java 8 alphorm.com™©

Page 37: Alphorm.com Java 8: les nouveautés

29/10/2015

37

Ce qu’on a couvert

• Le problème

• La solution nouvelle

Formation Les nouveautés Java 8 alphorm.com™©

Page 38: Alphorm.com Java 8: les nouveautés

29/10/2015

38

Les SAM

Les interfaces fonctionnelles

Formation Les nouveautés Java 8 alphorm.com™©

Les SAM

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 39: Alphorm.com Java 8: les nouveautés

29/10/2015

39

Plan

• Définition

• Exemples de SAM

• Les SAM et les expressions lambdas

Formation Les nouveautés Java 8 alphorm.com™©

Page 40: Alphorm.com Java 8: les nouveautés

29/10/2015

40

Définition

• Single Abstract Method

• Une interface avec une seule méthode déclarée

• Une interface qui existe POUR cette méthode

• Lorsqu’on l’utilise, on cherche essentiellement à traiter la méthode

Formation Les nouveautés Java 8 alphorm.com™©

Page 41: Alphorm.com Java 8: les nouveautés

29/10/2015

41

Exemple de SAM

• Les interfaces à une seule méthode existent en nombre en Java

• Pour l’ihm

� ActionListener : gestion du clic bouton

• Pour le tri

Formation Les nouveautés Java 8 alphorm.com™©

� Comparable : fourniture d’un ordre

• …

Page 42: Alphorm.com Java 8: les nouveautés

29/10/2015

42

Les SAM et les expressions lambdas

• Une SAM peut être avantageusement remplacée

• Pas besoin de créer une classe

• L’expression lambda se substitue à la méthode

• Doit être conforme à la signature

Formation Les nouveautés Java 8 alphorm.com™©

Page 43: Alphorm.com Java 8: les nouveautés

29/10/2015

43

Ce qu’on a couvert

• Définition

• Exemples de SAM

• Les SAM et les expressions lambdas

Formation Les nouveautés Java 8 alphorm.com™©

Page 44: Alphorm.com Java 8: les nouveautés

29/10/2015

44

@FunctionalInterface

Les interfaces fonctionnelles

Formation Les nouveautés Java 8 alphorm.com™©

@FunctionalInterface

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 45: Alphorm.com Java 8: les nouveautés

29/10/2015

45

Plan

• Définition

• Cas d’erreur

Formation Les nouveautés Java 8 alphorm.com™©

Page 46: Alphorm.com Java 8: les nouveautés

29/10/2015

46

Définition

• Une interface fonctionnelle

� Propose une seule méthode

� Existe pour cette méthode

� Peut être utilisée via une lambda expression

Formation Les nouveautés Java 8 alphorm.com™©

Page 47: Alphorm.com Java 8: les nouveautés

29/10/2015

47

Usage des interfaces fonctionnelles

• Définit une signature pour la méthode qu’elle propose

� Les types et nombres de paramètres de la méthode seront respectés

• Définit un type pour des passages de paramètres

� Un traitement peut imposer comme argument un objet conforme

• Définit un type pour des références de méthodes

Formation Les nouveautés Java 8 alphorm.com™©

• Définit un type pour des références de méthodes

� Il est possible de créer des variables références de méthodes

Page 48: Alphorm.com Java 8: les nouveautés

29/10/2015

48

Cas d’erreur

• Une interface fonctionnelle

• Possède une seule méthode et non plusieurs

• Impose les types de paramètres de sa fonction

Formation Les nouveautés Java 8 alphorm.com™©

Page 49: Alphorm.com Java 8: les nouveautés

29/10/2015

49

Ce qu’on a couvert

• Définition

• Cas d’erreur

Formation Les nouveautés Java 8 alphorm.com™©

Page 50: Alphorm.com Java 8: les nouveautés

29/10/2015

50

Function

Les interfaces fonctionnelles

Formation Les nouveautés Java 8 alphorm.com™©

Function

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 51: Alphorm.com Java 8: les nouveautés

29/10/2015

51

Plan

• L’interface Function<T,R>

• L’interface UnaryOperator<T>

• L’interface BiFunction<T,U,R>

• L’interface BinaryOperator<T>

Formation Les nouveautés Java 8 alphorm.com™©

Page 52: Alphorm.com Java 8: les nouveautés

29/10/2015

52

L’interface Function<T,R>

• Une interface fonctionnelle

• Qui accepte un paramètre et retourne une valeur

• La méthode fonctionnelle est apply telle que : R r = apply(T t)

• Autres méthodes implémentées par défaut :

Formation Les nouveautés Java 8 alphorm.com™©

� andThen(after) : applique la fonction courante puis celle en argument

� compose(before) : applique d’abord l’argument puis la courante

� identity() : retourne l’argument

Page 53: Alphorm.com Java 8: les nouveautés

29/10/2015

53

L’interface UnaryOperator<T>

• Sous interface de Function<T,R>

• La méthode apply retourne le même type que celui du paramètre

Formation Les nouveautés Java 8 alphorm.com™©

Page 54: Alphorm.com Java 8: les nouveautés

29/10/2015

54

L’interface BiFunction<T,U,R>

• Une interface fonctionnelle

• Qui accepte deux paramètres et retourne une valeur

• La méthode fonctionnelle est apply telle que : R r = apply(T t, U u)

• Autres méthodes implémentées par défaut :

Formation Les nouveautés Java 8 alphorm.com™©

� andThen(after) : applique la fonction courante puis celle en argument

Page 55: Alphorm.com Java 8: les nouveautés

29/10/2015

55

BinaryOperator<T>

• Sous interface de BiFunction<T,U,R>

• Les types T,U,R sont les mêmes

• Le type du retour est donc le même que ceux des paramètres

Formation Les nouveautés Java 8 alphorm.com™©

Page 56: Alphorm.com Java 8: les nouveautés

29/10/2015

56

Ce qu’on a couvert

• L’interface Function<T,R>

• L’interface UnaryOperator<T>

• L’interface BiFunction<T,U,R>

• L’interface BinaryOperator<T>

Formation Les nouveautés Java 8 alphorm.com™©

Page 57: Alphorm.com Java 8: les nouveautés

29/10/2015

57

Predicate

Les interfaces fonctionnelles

Formation Les nouveautés Java 8 alphorm.com™©

Predicate

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 58: Alphorm.com Java 8: les nouveautés

29/10/2015

58

Plan

• L’interface Predicate<T>

• L’interface BiPredicate<T,U>

• L’interface DoublePredicate

• L’interface IntPredicate

Formation Les nouveautés Java 8 alphorm.com™©

• L’interface LongPredicate

Page 59: Alphorm.com Java 8: les nouveautés

29/10/2015

59

L’interface Predicate<T>

• Représente une fonction qui prend un T

• Et retourne un booléen

• La méthode fonctionnelle est test telle que boolean b = test(T t)

• Autres méthodes avec implémentations :

Formation Les nouveautés Java 8 alphorm.com™©

� and( Predicate p) : compose avec un AND court-circuit

� negate() : retourne la négation logique

� or(Predicate p) : compose avec un OR coucrt-circuit

� isEqual(Object o) : test l’égalité

Page 60: Alphorm.com Java 8: les nouveautés

29/10/2015

60

L’interface BiPredicate<T,U>

• Interface fonctionnelle Predicate pour 2 paramètres

• La méthode fonctionnelle est test telle que boolean b = test(T t, U u)

• Autres méthodes implémentées :

� and( BiPredicate) : compose AND

Formation Les nouveautés Java 8 alphorm.com™©

� negate() : la négation logique

� or(BiPredicate) : compose OR

Page 61: Alphorm.com Java 8: les nouveautés

29/10/2015

61

L’interface DoublePredicate

• Interface fonctionnelle

• La méthode fonctionnelle est test

• Mais le paramètre est forcément un double

• Mêmes méthodes implémentées par défaut que Predicate

Formation Les nouveautés Java 8 alphorm.com™©

Page 62: Alphorm.com Java 8: les nouveautés

29/10/2015

62

L’interface IntPredicate

• Interface fonctionnelle

• La méthode fonctionnelle est test

• Mais le paramètre est forcément un int

• Mêmes méthodes implémentées par défaut que Predicate

Formation Les nouveautés Java 8 alphorm.com™©

Page 63: Alphorm.com Java 8: les nouveautés

29/10/2015

63

L’interface LongPredicate

• Interface fonctionnelle

• La méthode fonctionnelle est test

• Mais le paramètre est forcément un long

• Mêmes méthodes implémentées par défaut que Predicate

Formation Les nouveautés Java 8 alphorm.com™©

Page 64: Alphorm.com Java 8: les nouveautés

29/10/2015

64

Ce qu’on a couvert

• L’interface Predicate<T>

• L’interface BiPredicate<T,U>

• L’interface DoublePredicate

• L’interface IntPredicate

Formation Les nouveautés Java 8 alphorm.com™©

• L’interface LongPredicate

Page 65: Alphorm.com Java 8: les nouveautés

29/10/2015

65

Supplier

Les interfaces fonctionnelles

Formation Les nouveautés Java 8 alphorm.com™©

Supplier

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 66: Alphorm.com Java 8: les nouveautés

29/10/2015

66

Plan

• L’interface Supplier<T>

• L’interface BooleanSupplier

• L’interface DoubleSupplier

• L’interface IntSupplier

Formation Les nouveautés Java 8 alphorm.com™©

• L’interface LongSupplier

Page 67: Alphorm.com Java 8: les nouveautés

29/10/2015

67

L’interface Supplier<T>

• Interface fonctionnelle typée par le résultat attendu

• La méthode fonctionnelle est get telle que T resultat = get()

• Aucune méthode supplémentaire

• Pas d’impératif sur l’unicité des productions

Formation Les nouveautés Java 8 alphorm.com™©

Page 68: Alphorm.com Java 8: les nouveautés

29/10/2015

68

L’interface BooleanSupplier

• Interface fonctionnelle représentant la production de booléens

• La méthode fonctionnelle est getAsBoolean()

� Telle que : boolean b = getAsBoolean()

Formation Les nouveautés Java 8 alphorm.com™©

Page 69: Alphorm.com Java 8: les nouveautés

29/10/2015

69

L’interface DoubleSupplier

• Interface fonctionnelle représentant la production de double

• La méthode fonctionnelle est getAsDouble()

� Telle que : double res = getAsDouble()

Formation Les nouveautés Java 8 alphorm.com™©

Page 70: Alphorm.com Java 8: les nouveautés

29/10/2015

70

L’interface IntSupplier

• Interface fonctionnelle représentant la production de int

• La méthode fonctionnelle est getAsInt()

� Telle que : int res = getAsInt ()

Formation Les nouveautés Java 8 alphorm.com™©

Page 71: Alphorm.com Java 8: les nouveautés

29/10/2015

71

L’interface LongSupplier

• Interface fonctionnelle représentant la production de long

• La méthode fonctionnelle est getAsLong()

� Telle que : long res = getAsLong()

Formation Les nouveautés Java 8 alphorm.com™©

Page 72: Alphorm.com Java 8: les nouveautés

29/10/2015

72

Ce qu’on a couvert

• L’interface Supplier<T>

• L’interface BooleanSupplier

• L’interface DoubleSupplier

• L’interface IntSupplier

Formation Les nouveautés Java 8 alphorm.com™©

• L’interface LongSupplier

Page 73: Alphorm.com Java 8: les nouveautés

29/10/2015

73

Consumer

Les interfaces fonctionnelles

Formation Les nouveautés Java 8 alphorm.com™©

Consumer

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 74: Alphorm.com Java 8: les nouveautés

29/10/2015

74

Plan

• L’interface Consumer<T>

• L’interface DoubleConsumer

• L’interface IntConsumer

• L’interface LongConsumer

Formation Les nouveautés Java 8 alphorm.com™©

• L’interface ObjDoubleConsumer<T>

• L’interface ObjIntConsumer<T>

• L’interface ObjLongConsumer<T>

Page 75: Alphorm.com Java 8: les nouveautés

29/10/2015

75

L’interface Consumer<T>

• Interface fonctionnelle consommant des objets T

• La méthode fonctionnelle est accept telle que accept(T t)

• Travaille par effet de bords

• Autre méthode implémentée par défaut

Formation Les nouveautés Java 8 alphorm.com™©

� andThen(Consumer ) : compose la production en chaînant l’autre

Page 76: Alphorm.com Java 8: les nouveautés

29/10/2015

76

L’interface DoubleConsumer

• Interface spécialisée pour les double

• La méthode fonctionnelle accept(double) ne prend que double

Formation Les nouveautés Java 8 alphorm.com™©

Page 77: Alphorm.com Java 8: les nouveautés

29/10/2015

77

L’interface IntConsumer

• Interface spécialisée pour les int

• La méthode fonctionnelle accept(int) ne prend que int

Formation Les nouveautés Java 8 alphorm.com™©

Page 78: Alphorm.com Java 8: les nouveautés

29/10/2015

78

L’interface LongConsumer

• Interface spécialisée pour les long

• La méthode fonctionnelle accept(long) ne prend que long

Formation Les nouveautés Java 8 alphorm.com™©

Page 79: Alphorm.com Java 8: les nouveautés

29/10/2015

79

L’interface ObjDoubleConsumer<T>

• Interface fonctionnelle acceptant 2 paramètres

• La méthode accept est la méthode fonctionnelle

• Avec un paramètre objet T et un double

• Est telle que accept(T t, double d)

Formation Les nouveautés Java 8 alphorm.com™©

• Pas de retour

• Travaille par effets de bords

Page 80: Alphorm.com Java 8: les nouveautés

29/10/2015

80

L’interface ObjIntConsumer<T>

• Interface fonctionnelle acceptant 2 paramètres

• La méthode accept est la méthode fonctionnelle

• Avec un paramètre objet T et un int

• Est telle que accept(T t, int d)

Formation Les nouveautés Java 8 alphorm.com™©

• Pas de retour

• Travaille par effets de bords

Page 81: Alphorm.com Java 8: les nouveautés

29/10/2015

81

L’interface ObjLongConsumer<T>

• Interface fonctionnelle acceptant 2 paramètres

• La méthode accept est la méthode fonctionnelle

• Avec un paramètre objet T et un long

• Est telle que accept(T t, long d)

Formation Les nouveautés Java 8 alphorm.com™©

• Pas de retour

• Travaille par effets de bords

Page 82: Alphorm.com Java 8: les nouveautés

29/10/2015

82

Ce qu’on a couvert

• L’interface Consumer<T>

• L’interface DoubleConsumer

• L’interface IntConsumer

• L’interface LongConsumer

Formation Les nouveautés Java 8 alphorm.com™©

• L’interface ObjDoubleConsumer<T>

• L’interface ObjIntConsumer<T>

• L’interface ObjLongConsumer<T>

Page 83: Alphorm.com Java 8: les nouveautés

29/10/2015

83

Les annotations

Le langage

Formation Les nouveautés Java 8 alphorm.com™©

Les annotations répétables

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 84: Alphorm.com Java 8: les nouveautés

29/10/2015

84

Plan

• La base

• Les annotations classiques

• Les annotations répétables

Formation Les nouveautés Java 8 alphorm.com™©

Page 85: Alphorm.com Java 8: les nouveautés

29/10/2015

85

La base

• Une annotation est déclarée avec @interface

• Une annotation possède des propriétés

• Les propriétés peuvent posséder des valeurs par défaut

Formation Les nouveautés Java 8 alphorm.com™©

Page 86: Alphorm.com Java 8: les nouveautés

29/10/2015

86

Les annotations classiques

• Une annotation s’applique lors de la déclaration d’une classe, champ, méthode, …

• Une annotation peut aussi s’appliquer lors de l’utilisation du type

• Une seule annotation est d’un type donné par usage

• Les informations véhiculées par l’annotation sont disponibles après la

Formation Les nouveautés Java 8 alphorm.com™©

• Les informations véhiculées par l’annotation sont disponibles après la génération javadoc aussi

• Une annotation peut se voir restreindre à certains usages, et peut être disponible ou pas runtime

Page 87: Alphorm.com Java 8: les nouveautés

29/10/2015

87

Les annotations répétables

• Une annotation répétable peut être utilisée plusieurs fois sur le même élément

• Pour accéder à cette capacité :

� Annoter l’annotation avec @Repeatable

� Déclarer une annotation pour « contenir » l’annotation répétable

Formation Les nouveautés Java 8 alphorm.com™©

� Déclarer une annotation pour « contenir » l’annotation répétable

Page 88: Alphorm.com Java 8: les nouveautés

29/10/2015

88

Ce qu’on a couvert

• La base

• Les annotations classiques

• Les annotations répétables

Formation Les nouveautés Java 8 alphorm.com™©

Page 89: Alphorm.com Java 8: les nouveautés

29/10/2015

89

La réflexion sur

Le langage

Formation Les nouveautés Java 8 alphorm.com™©

La réflexion sur paramètres

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 90: Alphorm.com Java 8: les nouveautés

29/10/2015

90

Plan

• La réflexion en Java

• Les limites de la réflexion

• La réflexion sur les paramètres

Formation Les nouveautés Java 8 alphorm.com™©

Page 91: Alphorm.com Java 8: les nouveautés

29/10/2015

91

La réflexion en Java

• La classe est le descripteur des objets

• Les objets connaissent leur classe

• Trouver via un objet les caractéristiques de sa classe

• Concerne les membres en particuliers

Formation Les nouveautés Java 8 alphorm.com™©

• Permet :

� D’invoquer une méthode sans écrire directement l’appel

� De découvrir les champs d’un objet

� …

Page 92: Alphorm.com Java 8: les nouveautés

29/10/2015

92

Les limites de la reflexion

• Eventuel problème de performance

• La perte de contrôle de type lors de la compilation

• Si on accède aux membres par leurs noms, problème de refactoring

• Jusqu’en Java 8, impossible de trouver les noms des paramètres

Formation Les nouveautés Java 8 alphorm.com™©

Page 93: Alphorm.com Java 8: les nouveautés

29/10/2015

93

La réflexion sur les paramètres

• En Java8, il est possible de récupérer les noms

• Auparavant, il fallait contourner

� Utiliser les annotations

• Ne pas oublier de compiler avec l’otpion javac : -parameters

Formation Les nouveautés Java 8 alphorm.com™©

Page 94: Alphorm.com Java 8: les nouveautés

29/10/2015

94

Ce qu’on a couvert

• La réflexion en Java

• Les limites de la réflexion

• La réflexion sur les paramètres

Formation Les nouveautés Java 8 alphorm.com™©

Page 95: Alphorm.com Java 8: les nouveautés

29/10/2015

95

Les optional

Le langage

Formation Les nouveautés Java 8 alphorm.com™©

Les optional

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 96: Alphorm.com Java 8: les nouveautés

29/10/2015

96

Plan

• Le problème

• La classe Optional<T>

Formation Les nouveautés Java 8 alphorm.com™©

Page 97: Alphorm.com Java 8: les nouveautés

29/10/2015

97

Le problème

• En Java, seules les références peuvent être nulles

• Les types primitifs ne supportent pas la valeur nulle

• Comment exprimer l’absence de valeur ?

• Eviter de déterminer une valeur remarquable

Formation Les nouveautés Java 8 alphorm.com™©

Page 98: Alphorm.com Java 8: les nouveautés

29/10/2015

98

La classe Optional<T>

• Encapsule une valeur de type T

• Cette valeur peut être absente

• Méthodes :

� Retourne la valeur avec get()

Formation Les nouveautés Java 8 alphorm.com™©

� Teste la présence avec isPresent()

� Construit avec of(T), ofNullable(T)

� Récupère la valeur avec : orElse(), orElseGet(), orElseThrow()…

Page 99: Alphorm.com Java 8: les nouveautés

29/10/2015

99

Ce qu’on a couvert

• Le problème

• La classe Optional<T>

Formation Les nouveautés Java 8 alphorm.com™©

Page 100: Alphorm.com Java 8: les nouveautés

29/10/2015

100

Les classes java.util.stream

Les streams

Formation Les nouveautés Java 8 alphorm.com™©

Les classes java.util.stream

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 101: Alphorm.com Java 8: les nouveautés

29/10/2015

101

Plan

• L’interface BaseStream<>

• L’interface Stream<T>

• Les interfaces spécialisées

• Les interfaces Stream.Builder

Formation Les nouveautés Java 8 alphorm.com™©

Page 102: Alphorm.com Java 8: les nouveautés

29/10/2015

102

L’interface BaseStream<>

• Interface de base de toutes les interfaces Stream

• Les streams sont des séquences d’éléments qui supportent des opérations agrégées

• Les méthodes :

� Fermeture : close()

Formation Les nouveautés Java 8 alphorm.com™©

� Fermeture : close()

� Parallélisme : parallel(), isParallel()

� En séquence : sequential()

� Itération : iterator(), spliterator()

� Libérer la contrainte d’ordre : unordered()

Page 103: Alphorm.com Java 8: les nouveautés

29/10/2015

103

L’interface Stream<T>

• Sous-interface de BaseStream

• Manipule des objets Java

• Obtenu à partir d’une source (tableau, collection, fonction, canal IO…)

• Permet de construire un pipeline, la source n’est consommée que si nécessaire et lors de l’application d’une opération terminale

Formation Les nouveautés Java 8 alphorm.com™©

nécessaire et lors de l’application d’une opération terminale

• Les opérations attendent de interfaces fonctionnelles, non nulles, non interférentes et en général sans état

• Un Stream est opéré une seule fois.

• Exécution séquentielle ou parallèle

Page 104: Alphorm.com Java 8: les nouveautés

29/10/2015

104

Les interfaces spécialisées

• DoubleStream, IntStream, LongStream

• Ce sont des spécialisations de Stream pour les primitives

• Des méthodes permettent de récupérer des objets au lieu des primitives

• Cohérent avec les Double/Int/LongSupplier-Consumer…

Formation Les nouveautés Java 8 alphorm.com™©

• Méthodes par exemple du DoubleStream :

� map(DoubleUnaryOperator),

� mapToInt(DoubleToIntFunction),

� mapToLong(DoubleToLongFunction),

� mapToObj(DoubleFunction)

Page 105: Alphorm.com Java 8: les nouveautés

29/10/2015

105

Les interfaces Stream.Builder

• Existent aussi sur DoubleStream, IntStream et LongStream

• Permet de créer un Stream et de le modifier avant d’appliquer les opérations

• Le Stream sera généré lors de l’appel de build()

Formation Les nouveautés Java 8 alphorm.com™©

Page 106: Alphorm.com Java 8: les nouveautés

29/10/2015

106

Ce qu’on a couvert

• L’interface BaseStream<>

• L’interface Stream<T>

• Les interfaces spécialisées

• Les interfaces Stream.Builder

Formation Les nouveautés Java 8 alphorm.com™©

Page 107: Alphorm.com Java 8: les nouveautés

29/10/2015

107

Les opérations sur Streams

Les streams

Formation Les nouveautés Java 8 alphorm.com™©

Les opérations sur Streams

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 108: Alphorm.com Java 8: les nouveautés

29/10/2015

108

Plan

• Méthodes intermédiaires

• Méthodes terminales

• La classe Collectors

Formation Les nouveautés Java 8 alphorm.com™©

Page 109: Alphorm.com Java 8: les nouveautés

29/10/2015

109

Méthodes intermédiaires

• Méthode distinct : retourne un Stream dont les éléments sont distincts

• Méthode filter (Predicate) : … dont les éléments correspondent au prédicat

• Méthode flatMap (Function) : … dont les éléments sont remplacés par les éléments du Stream fournit par la fonction

Formation Les nouveautés Java 8 alphorm.com™©

• Méthode limit (long) : … limité en nombre d’éléments

Page 110: Alphorm.com Java 8: les nouveautés

29/10/2015

110

Méthodes intermédiaires

• Méthode map(Function) : … dont les éléments sont l’application de la fonction à chaque élément

• Méthode peek(Consumer) : … dont les éléments sont les mêmes, mais la fonction est appliquée à chaque élément

• Méthode skip(long) : … dont les éléments sont ceux qui restent lorsqu’on a éliminé les premiers

Formation Les nouveautés Java 8 alphorm.com™©

lorsqu’on a éliminé les premiers

• Méthode sorted() : … dont les éléments sont triés selon l’ordre naturel

Page 111: Alphorm.com Java 8: les nouveautés

29/10/2015

111

Méthodes terminales

• Méthode allMatch (Predicate) : retourne vrai si chaque élément vérifie le prédicat

• Méthode anyMatch(Precicate) : retourne vrai si l’un des éléments vérifie le prédicat

• Méthode findAny() : retourne un Optional qui représente un des éléments du Stream

Formation Les nouveautés Java 8 alphorm.com™©

éléments du Stream

• Méthode findFirst() : retourne un Optional qui représente le premier élément du Stream

Page 112: Alphorm.com Java 8: les nouveautés

29/10/2015

112

Méthodes terminales

• Méthode noneMatch(Predicate) : retourne vrai si aucun élément ne vérifie le prédicat

• Méthode forEach(Consumer) : applique la fonction sur chacun des éléments

• Méthode reduce(BinaryOperator) : réduit les éléments en les accumulant grâce à la fonction fournie, retourne un Optional

Formation Les nouveautés Java 8 alphorm.com™©

accumulant grâce à la fonction fournie, retourne un Optional

Page 113: Alphorm.com Java 8: les nouveautés

29/10/2015

113

La classe Collectors

• Une classe de service dans java.util.stream

• Fournit des réductions

Formation Les nouveautés Java 8 alphorm.com™©

• Méthodes : averaging(), counting(), groupingBy(), joining(), partitioningBy(), summing(), toMap(), toSet()…

Page 114: Alphorm.com Java 8: les nouveautés

29/10/2015

114

Ce qu’on a couvert

• Méthodes intermédiaires

• Méthodes terminales

• La classe Collectors

Formation Les nouveautés Java 8 alphorm.com™©

Page 115: Alphorm.com Java 8: les nouveautés

29/10/2015

115

Les Streams parallèles

Les streams

Formation Les nouveautés Java 8 alphorm.com™©

Les Streams parallèles

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 116: Alphorm.com Java 8: les nouveautés

29/10/2015

116

Plan

• Obtention de Streams parallèles

• Les effets du parallèlisme

Formation Les nouveautés Java 8 alphorm.com™©

Page 117: Alphorm.com Java 8: les nouveautés

29/10/2015

117

Obtention de Streams parallèles

• Les Streams peuvent être séquentiels ou parallèles

• Les Streams parallèles peuvent être traités en parallèles par plusieurs threads

• La plupart des méthodes produisent par défaut des Streams séquentiels

• Pour créer un Stream parallèle à partir d’une collection, utiliser la

Formation Les nouveautés Java 8 alphorm.com™©

• Pour créer un Stream parallèle à partir d’une collection, utiliser la méthode parallelStream()

• Pour convertir un Stream séquentiel en parallèle, utiliser parallel()

• Pour convertir un Stream parallèle en séquentiel, utiliser sequential()

Page 118: Alphorm.com Java 8: les nouveautés

29/10/2015

118

Les effets du parallèlisme

• Paralléliser doit être plus rapide, efficace

• Mais cette efficacité supposée peut être réduite : par les contraintes d’ordonnancement du Stream, par l’ordre des opérations…

• Des accès concurrents peuvent produire des résultats malheureux

Formation Les nouveautés Java 8 alphorm.com™©

Page 119: Alphorm.com Java 8: les nouveautés

29/10/2015

119

Ce qu’on a couvert

• Obtention de Streams parallèles

• Les effets du parallèlisme

Formation Les nouveautés Java 8 alphorm.com™©

Page 120: Alphorm.com Java 8: les nouveautés

29/10/2015

120

Les classes de dates

Les dates

Formation Les nouveautés Java 8 alphorm.com™©

Les classes de dates

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 121: Alphorm.com Java 8: les nouveautés

29/10/2015

121

Plan

• Les objectifs de l’API Date

• Les classes LocalDate et LocalTime

• Les classes de zones

• Les classes Period et Duration

Formation Les nouveautés Java 8 alphorm.com™©

• Les chronologies

Page 122: Alphorm.com Java 8: les nouveautés

29/10/2015

122

Les objectifs de l’API Date

• Un nouveau package apparaît : java.time

• Les classes sont « immutable value », donc pas de problèmes avec le multi threading

• Les classes représentent correctement le domaine, donc pas de confusion

Formation Les nouveautés Java 8 alphorm.com™©

� La classe java.util.Date ne possédait pas de zone

• Des chronologies différentes de ISO-8601 sont possibles

Page 123: Alphorm.com Java 8: les nouveautés

29/10/2015

123

Les classes LocalDate et LocalTime

• Ce sont des classes qui représentent date et heure sur le poste courant

• Il existe aussi LocalDateTime

• Le contexte de zone n’existe pas

• Méthodes de création : now, of, from, parse

Formation Les nouveautés Java 8 alphorm.com™©

Page 124: Alphorm.com Java 8: les nouveautés

29/10/2015

124

Les classes LocalDate et LocalTime

• La classe la « modification » des données se fait avec with

• Les « ajusteurs », certains standards et sinon à écrire soi-même

Formation Les nouveautés Java 8 alphorm.com™©

• Possibilités de tronquer les infos

Page 125: Alphorm.com Java 8: les nouveautés

29/10/2015

125

Les classes de zones

• Une zone peut être représentée par une chaîne de caractères

• La classe ZoneId sert à garder cette information

Formation Les nouveautés Java 8 alphorm.com™©

• ZonedDateTime est une date/heure avec les informations de zone

• OffsetDateTime est une date/heure avec l’offset (de zone UTC)

• OffsetTime est une heure avec l’offset

Page 126: Alphorm.com Java 8: les nouveautés

29/10/2015

126

Les classes Period et Duration

• La classe Period représente une durée en jour-mois-année et non un point dans le temps

• La classe Duration représente des durées en heures, etc plus précis que

Formation Les nouveautés Java 8 alphorm.com™©

• La classe Duration représente des durées en heures, etc plus précis que Period

Page 127: Alphorm.com Java 8: les nouveautés

29/10/2015

127

Les chronologies

• Un package java.time.chrono

• Une interface Chronology, représentant un système calendaire

• Des classes implémentant cette interface : IsoChronology, JapaneseChronology,…

• Ce sont des factories pour des ChronoLocalDate (interface)

Formation Les nouveautés Java 8 alphorm.com™©

• Ce sont des factories pour des ChronoLocalDate (interface)

� Méthodes dateNow(), dateNow(..), date(…)

• Classes implémentant ChronoLocalDate :

� LocalDate, JapaneseDate,…

Page 128: Alphorm.com Java 8: les nouveautés

29/10/2015

128

Ce qu’on a couvert

• Les objectifs de l’API Date

• Les classes LocalDate et LocalTime

• Les classes de zones

• Les classes Period et Duration

Formation Les nouveautés Java 8 alphorm.com™©

• Les chronologies

Page 129: Alphorm.com Java 8: les nouveautés

29/10/2015

129

La gestion du temps

Les dates

Formation Les nouveautés Java 8 alphorm.com™©

La gestion du temps

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 130: Alphorm.com Java 8: les nouveautés

29/10/2015

130

Plan

• La gestion du temps local

• La gestion du temps zoné

Formation Les nouveautés Java 8 alphorm.com™©

Page 131: Alphorm.com Java 8: les nouveautés

29/10/2015

131

La gestion du temps local

• La classe LocalDate

� Les constantes MAX et MIN

• Les méthodes

� Création de LocalDateTime : atTime, …

Getters : getDayOfMonth()…

Formation Les nouveautés Java 8 alphorm.com™©

� Getters : getDayOfMonth()…

� Informations sur le mois, l’année …

� Date maintenant

� Modifications : minus, plus, withXXX

Page 132: Alphorm.com Java 8: les nouveautés

29/10/2015

132

La gestion du temps zoné

• La classe ZonedDateTime

• Les créateurs of, now, …

• Les modificateurs plus, minus, with, …

• Temps restant : until

Formation Les nouveautés Java 8 alphorm.com™©

• Travail sur offset : getOffset()

Page 133: Alphorm.com Java 8: les nouveautés

29/10/2015

133

Ce qu’on a couvert

• La gestion du temps local

• La gestion du temps zoné

Formation Les nouveautés Java 8 alphorm.com™©

Page 134: Alphorm.com Java 8: les nouveautés

29/10/2015

134

Le format date et heure

Les dates

Formation Les nouveautés Java 8 alphorm.com™©

Le format date et heure

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 135: Alphorm.com Java 8: les nouveautés

29/10/2015

135

Plan

• Le package java.time.format

• La classe DateTimeFormatter

• La classe DateTimeFormatterBuilder

Formation Les nouveautés Java 8 alphorm.com™©

Page 136: Alphorm.com Java 8: les nouveautés

29/10/2015

136

Le package java.time.format

• Fournit des classes pour afficher et parser des dates

• La classe DateTimeFormatter est suffisante pour la plupart des cas

• Pour les situations complexes, on utilisera DateTimeFormatterBuilder

• Les classes du package ne supportent pas des arguments null

Formation Les nouveautés Java 8 alphorm.com™©

Page 137: Alphorm.com Java 8: les nouveautés

29/10/2015

137

La classe DateTimeFormatter

• Cette classe proposent de formatter des dates en chaînes de caractères ou de lire une chaîne en date

• Utilise des constantes prédéfinies

• Utilise des motifs prédéfinis

• Utilise des styles prédéfinis

Formation Les nouveautés Java 8 alphorm.com™©

• Utilise des styles prédéfinis

Page 138: Alphorm.com Java 8: les nouveautés

29/10/2015

138

La classe DateTimeFormatterBuilder

• Le builder de base des DateTimeFormatter

• Il permet de faire apparaître les éléments suivants :

� Valeur, Fraction, Text

� OffsetId/Offset, ZoneId, ZoneText

ChronologyId, ChronologyText

Formation Les nouveautés Java 8 alphorm.com™©

� ChronologyId, ChronologyText

� Literal

� Nested et Optional

• Chaque élément peut être arrangé avec des espaces/caractères avant et après

Page 139: Alphorm.com Java 8: les nouveautés

29/10/2015

139

Ce qu’on a couvert

• Le package java.time.format

• La classe DateTimeFormatter

• La classe DateTimeFormatterBuilder

Formation Les nouveautés Java 8 alphorm.com™©

Page 140: Alphorm.com Java 8: les nouveautés

29/10/2015

140

Les chronologies

Les dates

Formation Les nouveautés Java 8 alphorm.com™©

Les chronologies

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 141: Alphorm.com Java 8: les nouveautés

29/10/2015

141

Plan

• Le package java.time.chrono

• Manipuler les chronologies

Formation Les nouveautés Java 8 alphorm.com™©

Page 142: Alphorm.com Java 8: les nouveautés

29/10/2015

142

Le package java.time.chrono

• Décrit les classes de chronologies

• L’interface Chronology : représente un système calendaire

• Il est possible d’ajouter de nouveaux calendriers en créant une implémentation Chronology, ChronoLocalDate et Era.

• Chronology fonctionne comme une factory

Formation Les nouveautés Java 8 alphorm.com™©

• Chronology fonctionne comme une factory

Page 143: Alphorm.com Java 8: les nouveautés

29/10/2015

143

Manipuler les chronologies

• Trouver les chronologies disponibles

• Créer une date : dateNow, date, dateYearDay…

• Manipuler des ChronoLocalDate et des ChronoPeriod

• Obtenir des ChronoZonedDateTime

Formation Les nouveautés Java 8 alphorm.com™©

Page 144: Alphorm.com Java 8: les nouveautés

29/10/2015

144

Ce qu’on a couvert

• Le package java.time.chrono

• Manipuler les chronologies

Formation Les nouveautés Java 8 alphorm.com™©

Page 145: Alphorm.com Java 8: les nouveautés

29/10/2015

145

L’internationalisation

Les dates

Formation Les nouveautés Java 8 alphorm.com™©

L’internationalisation

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 146: Alphorm.com Java 8: les nouveautés

29/10/2015

146

Plan

• Les dates selon les chronologies

• Les possibilités de DateTimeFormatter

Formation Les nouveautés Java 8 alphorm.com™©

Page 147: Alphorm.com Java 8: les nouveautés

29/10/2015

147

Les dates selon les chronologies

• Chaque chronologie a sa propre représentation

• Un style de date et d’heure

� FormatStyle (FULL, LONG, MEDIUM, SHORT)

• Un style décimal

Formation Les nouveautés Java 8 alphorm.com™©

� DecimalStyle (STANDARD)

• Méthode of(Locale)

• …

Page 148: Alphorm.com Java 8: les nouveautés

29/10/2015

148

Les possibilités de DateTimeFormatter

• Méthodes ofLocalizedDate, Time

• Des formatters prédéfinis : BASIC_ISO_DATE, …

• Des méthodes de construction : ofPattern(…)

� « yyyy MM dd »

Formation Les nouveautés Java 8 alphorm.com™©

� Format à découvrir dans la documentation

Page 149: Alphorm.com Java 8: les nouveautés

29/10/2015

149

Ce qu’on a couvert

• Les dates selon les chronologies

• Les possibilités de DateTimeFormatter

Formation Les nouveautés Java 8 alphorm.com™©

Page 150: Alphorm.com Java 8: les nouveautés

29/10/2015

150

Package java.util.concurrent

La concurrence

Formation Les nouveautés Java 8 alphorm.com™©

Package java.util.concurrent

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 151: Alphorm.com Java 8: les nouveautés

29/10/2015

151

Plan

• Les nouvelles classes et interfaces

• La classe ConcurrentHashMap

• Le package java.util.concurrent.atomic

• La classe ForkJoinPool

Formation Les nouveautés Java 8 alphorm.com™©

Page 152: Alphorm.com Java 8: les nouveautés

29/10/2015

152

Les nouvelles classes et interfaces

• CompletableFuture.AsynchronousCompletionTask : marque les tâches crées par les méthodes async

• CompletionStage<T> :

• CompletableFuture<T> : une Future qui peut être terminée

• ConcurrentHashMap.KeySetView<T> : une vue de la map en set

Formation Les nouveautés Java 8 alphorm.com™©

• ConcurrentHashMap.KeySetView<T> : une vue de la map en set

• CountedCompleter<T> : une ForkJoinTask avec une action de terminaison lors de la levée d’un trigger

• CompletionException : exception levée lors de l’accomplissement d’une tâche

Page 153: Alphorm.com Java 8: les nouveautés

29/10/2015

153

La classe ConcurrentHashMap

• Nouvelles méthodes ajoutées

• Dues à la gestion de Streams et l’apparition des lambdas

Formation Les nouveautés Java 8 alphorm.com™©

Page 154: Alphorm.com Java 8: les nouveautés

29/10/2015

154

Le package java.util.concurrent.atomic

• La classe DoubleAccumulator : maintenir une variable double

• La classe DoubleAdder : maintenir une somme initialement à 0

• La classe LongAccumulator

• La classe LongAdder

Formation Les nouveautés Java 8 alphorm.com™©

Page 155: Alphorm.com Java 8: les nouveautés

29/10/2015

155

La classe ForkJoinPool

• Un ajout d’une méthode commonPool()

Formation Les nouveautés Java 8 alphorm.com™©

Page 156: Alphorm.com Java 8: les nouveautés

29/10/2015

156

Ce qu’on a couvert

• Les nouvelles classes et interfaces

• La classe ConcurrentHashMap

• Le package java.util.concurrent.atomic

• La classe ForkJoinPool

Formation Les nouveautés Java 8 alphorm.com™©

Page 157: Alphorm.com Java 8: les nouveautés

29/10/2015

157

La classe StampedLock

La concurrence

Formation Les nouveautés Java 8 alphorm.com™©

La classe StampedLock

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 158: Alphorm.com Java 8: les nouveautés

29/10/2015

158

Plan

• La classe StampedLock

• Usages de StampedLock

Formation Les nouveautés Java 8 alphorm.com™©

Page 159: Alphorm.com Java 8: les nouveautés

29/10/2015

159

La classe StampedLock

• Dans le package java.util.concurrent.locks

• Un verrou fonctionnant en 3 modes

� Mode écriture : bloque sur un accès exclusif. Retourne un « stamp »

� Mode lecture : bloque sur un accès non exclusif

Mode lecture optimiste : retourne un « stamp » non null quand le verrou

Formation Les nouveautés Java 8 alphorm.com™©

� Mode lecture optimiste : retourne un « stamp » non null quand le verrou n’est pas en accès exclusif

Page 160: Alphorm.com Java 8: les nouveautés

29/10/2015

160

Usages du StampedLock

• Utiles pour le développement de composants thread-safe

• Ils ne sont pas réentrants

Formation Les nouveautés Java 8 alphorm.com™©

Page 161: Alphorm.com Java 8: les nouveautés

29/10/2015

161

Ce qu’on a couvert

• La classe StampedLock

• Usages de StampedLock

Formation Les nouveautés Java 8 alphorm.com™©

Page 162: Alphorm.com Java 8: les nouveautés

29/10/2015

162

java.net.URLPermission

La concurrence

Formation Les nouveautés Java 8 alphorm.com™©

java.net.URLPermission

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 163: Alphorm.com Java 8: les nouveautés

29/10/2015

163

Plan

• Le package java.net

• La classe java.net.URLPermission

Formation Les nouveautés Java 8 alphorm.com™©

Page 164: Alphorm.com Java 8: les nouveautés

29/10/2015

164

Le package java.net

• Package des classes et interfaces utilisées pour les accès réseau

• Une section bas niveau

� Adresses, sockets, interfaces

• Une section haut niveau

Formation Les nouveautés Java 8 alphorm.com™©

� URIs, URLs,Connexions

Page 165: Alphorm.com Java 8: les nouveautés

29/10/2015

165

La classe URLPermission

• Représente la permission d’accéder à une ressource

• Les constructeurs ont besoin

� Du nom : l’url

� De l’action : méthode et entêtes

Formation Les nouveautés Java 8 alphorm.com™©

Page 166: Alphorm.com Java 8: les nouveautés

29/10/2015

166

Ce qu’on a couvert

• Le package java.net

• La classe java.net.URLPermission

Formation Les nouveautés Java 8 alphorm.com™©

Page 167: Alphorm.com Java 8: les nouveautés

29/10/2015

167

Le tri parallèle

Les collections

Formation Les nouveautés Java 8 alphorm.com™©

Le tri parallèle

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 168: Alphorm.com Java 8: les nouveautés

29/10/2015

168

Plan

• La classe Arrays

• Différence entre sort() et parallelSort()

Formation Les nouveautés Java 8 alphorm.com™©

Page 169: Alphorm.com Java 8: les nouveautés

29/10/2015

169

La classe Arrays

• Du package java.util

• Contient des méthodes utilitaires pour les tableaux

• Contient des méthodes de création de tableaux

Formation Les nouveautés Java 8 alphorm.com™©

Page 170: Alphorm.com Java 8: les nouveautés

29/10/2015

170

Différences entre sort() et parallelSort()

• La méthode sort s’applique à toute sorte d’éléments

• Avec indexes

• Avec comparateurs

• Le tri en parallèle divise explicitement le tableau en répartissant les morceaux (split) sur des threads différents

Formation Les nouveautés Java 8 alphorm.com™©

morceaux (split) sur des threads différents

Page 171: Alphorm.com Java 8: les nouveautés

29/10/2015

171

Ce qu’on a couvert

• La classe Arrays

• Différence entre sort() et parallelSort()

Formation Les nouveautés Java 8 alphorm.com™©

Page 172: Alphorm.com Java 8: les nouveautés

29/10/2015

172

Encodage Base64

Les collections

Formation Les nouveautés Java 8 alphorm.com™©

Encodage Base64

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 173: Alphorm.com Java 8: les nouveautés

29/10/2015

173

Plan

• La classe java.util.Base64

• Usages de l’encodage

Formation Les nouveautés Java 8 alphorm.com™©

Page 174: Alphorm.com Java 8: les nouveautés

29/10/2015

174

La classe java.util.Base64

• Constituée de méthodes statiques

• Ne pas passer de paramètres null

• Les types supportés sont :

� Basic : utilise l’alphabet de la table 1, aucun ajout

Formation Les nouveautés Java 8 alphorm.com™©

� URL safe : utilise l’alphabet de la table 2, aucun ajout

� MIME : utilise la table 1, ajout de \r\n

• Méthode getEncoder(), getDecoder()…

Page 175: Alphorm.com Java 8: les nouveautés

29/10/2015

175

Usages de l’encodage

• Base64 est un codage de l’information

• Défini comme encodage MIME

• Parce que les protocoles ont été prévus pour transmettre des messages en texte seulement

• Provoque en général une augmentation du volume des données

Formation Les nouveautés Java 8 alphorm.com™©

• Provoque en général une augmentation du volume des données

Page 176: Alphorm.com Java 8: les nouveautés

29/10/2015

176

Ce qu’on a couvert

• La classe java.util.Base64

• Usages de l’encodage

Formation Les nouveautés Java 8 alphorm.com™©

Page 177: Alphorm.com Java 8: les nouveautés

29/10/2015

177

L’arithmétique non signée

Les collections

Formation Les nouveautés Java 8 alphorm.com™©

L’arithmétique non signée

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 178: Alphorm.com Java 8: les nouveautés

29/10/2015

178

Plan

• Types signés et non-signés

• Les méthodes de Integer et Long

Formation Les nouveautés Java 8 alphorm.com™©

Page 179: Alphorm.com Java 8: les nouveautés

29/10/2015

179

Types signés et non-signés

• Il n’existe pas de types non-signés en Java

• Parfois de la confusion peut s’introduire dans la manipulation

• Il faut faire attention :

� Lors des opérations portées sur les variables

Formation Les nouveautés Java 8 alphorm.com™©

� Lors de l’affichage

Page 180: Alphorm.com Java 8: les nouveautés

29/10/2015

180

Les méthodes de Integer et Long

• Méthodes qui manipulent des données non signées

• La méthode compareUnsigned

• La méthode divideUnsigned

• Les méthodes parseUnsignedInt

Formation Les nouveautés Java 8 alphorm.com™©

• La méthode remainderUnsigned

• La méthode toUnsignedLong

• Les méthodes toUnsignedString

Page 181: Alphorm.com Java 8: les nouveautés

29/10/2015

181

Ce qu’on a couvert

• Types signés et non-signés

• Les méthodes de Integer et Long

Formation Les nouveautés Java 8 alphorm.com™©

Page 182: Alphorm.com Java 8: les nouveautés

29/10/2015

182

La ligne de commande

Les outils

Formation Les nouveautés Java 8 alphorm.com™©

La ligne de commande

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 183: Alphorm.com Java 8: les nouveautés

29/10/2015

183

Plan

• L’outil jjs

• L’outil jdeps

• L’outil javac -h

Formation Les nouveautés Java 8 alphorm.com™©

Page 184: Alphorm.com Java 8: les nouveautés

29/10/2015

184

L’outil jjs

• Moteur javascript Nashorn

• Commande jjs en ligne de commande

• Trouvée sous \bin

• Interpréteur encapsulable dans les applications Java

Formation Les nouveautés Java 8 alphorm.com™©

Page 185: Alphorm.com Java 8: les nouveautés

29/10/2015

185

L’outil jdeps

• Un outil pour analyser les dépendances entre les classes

• Se lance sur une classe et recherche les dépendances à partir de celle-ci

• Options disponibles

Formation Les nouveautés Java 8 alphorm.com™©

Page 186: Alphorm.com Java 8: les nouveautés

29/10/2015

186

L’outil javac -h

• Génère les entêtes natifs

• Plus besoin de passer par javah

• Les entêtes sont générés pour toute classe qui possède des méthode native ou qui utilise l’annotation Native

Formation Les nouveautés Java 8 alphorm.com™©

Page 187: Alphorm.com Java 8: les nouveautés

29/10/2015

187

Ce qu’on a couvert

• L’outil jjs

• L’outil jdeps

• L’outil javac -h

Formation Les nouveautés Java 8 alphorm.com™©

Page 188: Alphorm.com Java 8: les nouveautés

29/10/2015

188

Nashorn

Les outils

Formation Les nouveautés Java 8 alphorm.com™©

Nashorn

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 189: Alphorm.com Java 8: les nouveautés

29/10/2015

189

Plan

• Nouveau moteur javascript

• Extensions

• Encapsulable

Formation Les nouveautés Java 8 alphorm.com™©

Page 190: Alphorm.com Java 8: les nouveautés

29/10/2015

190

Nouveau moteur javascript

• En Java 7, un moteur basé sur Rhino

• Mieux conforme aux spécifications normalisées ECMA

• Meilleure performance

• Mode standalone

Formation Les nouveautés Java 8 alphorm.com™©

• Mode encapsulé dans une application Java

• Javascript peut appeler du Java

• Java peut appeler du javascript

Page 191: Alphorm.com Java 8: les nouveautés

29/10/2015

191

Extensions

• Les applications JavaFX sont exécutables comme scripts

• Le mode strict du Javascript est activable

• Le classpath peut être modifié pour la JVM

• Il existe un mode scripting

Formation Les nouveautés Java 8 alphorm.com™©

Page 192: Alphorm.com Java 8: les nouveautés

29/10/2015

192

Encapsulable

• L’interaction avec Java devient plus simple

• Une application Java peut exécuter du Javascript de façon simple

Formation Les nouveautés Java 8 alphorm.com™©

Page 193: Alphorm.com Java 8: les nouveautés

29/10/2015

193

Ce qu’on a couvert

• Nouveau moteur javascript

• Extensions

• Encapsulable

Formation Les nouveautés Java 8 alphorm.com™©

Page 194: Alphorm.com Java 8: les nouveautés

29/10/2015

194

Les profils compacts

Les outils

Formation Les nouveautés Java 8 alphorm.com™©

Les profils compacts

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 195: Alphorm.com Java 8: les nouveautés

29/10/2015

195

Plan

• Définition et intérêt

• Composition des profils

Formation Les nouveautés Java 8 alphorm.com™©

Page 196: Alphorm.com Java 8: les nouveautés

29/10/2015

196

Définition et intérêt

• Réduire l’empreinte mémoire

• Pour les applications qui n’ont pas besoin de toute la plateforme

• Option javac –profile

• 3 profils supportés

Formation Les nouveautés Java 8 alphorm.com™©

Page 197: Alphorm.com Java 8: les nouveautés

29/10/2015

197

Composition des profils

• Chaque profils apporte des éléments

Formation Les nouveautés Java 8 alphorm.com™©

Page 198: Alphorm.com Java 8: les nouveautés

29/10/2015

198

Ce qu’on a couvert

• Définition et intérêt

• Composition des profils

Formation Les nouveautés Java 8 alphorm.com™©

Page 199: Alphorm.com Java 8: les nouveautés

29/10/2015

199

Le thème Modena

JavaFX

Formation Les nouveautés Java 8 alphorm.com™©

Le thème Modena

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 200: Alphorm.com Java 8: les nouveautés

29/10/2015

200

Plan

• Un nouveau thème

• Nouveaux contrôles

Formation Les nouveautés Java 8 alphorm.com™©

Page 201: Alphorm.com Java 8: les nouveautés

29/10/2015

201

Un nouveau thème

• Remplace Caspian

Formation Les nouveautés Java 8 alphorm.com™©

Page 202: Alphorm.com Java 8: les nouveautés

29/10/2015

202

Nouveaux contrôles

Formation Les nouveautés Java 8 alphorm.com™©

Page 203: Alphorm.com Java 8: les nouveautés

29/10/2015

203

Ce qu’on a couvert

• Un nouveau thème

• Nouveaux contrôles

Formation Les nouveautés Java 8 alphorm.com™©

Page 204: Alphorm.com Java 8: les nouveautés

29/10/2015

204

Encapsulation de Swing

JavaFX

Formation Les nouveautés Java 8 alphorm.com™©

Encapsulation de Swing dans JavaFX

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 205: Alphorm.com Java 8: les nouveautés

29/10/2015

205

Plan

• La classe SwingNode

• Encapsuler un SwingNode

Formation Les nouveautés Java 8 alphorm.com™©

Page 206: Alphorm.com Java 8: les nouveautés

29/10/2015

206

La classe SwingNode

• Hérite de Node

• Possède un constructeur par défaut

• Permet d’encapsuler des composants Swing

• Peut fournir le composant Swing encapsulé par getComponent()

Formation Les nouveautés Java 8 alphorm.com™©

Page 207: Alphorm.com Java 8: les nouveautés

29/10/2015

207

Encapsuler un composant Swing

• Créer un objet SwingNode

• Ajouter ce nœud au contenu de la scène

Formation Les nouveautés Java 8 alphorm.com™©

Page 208: Alphorm.com Java 8: les nouveautés

29/10/2015

208

Ce qu’on a couvert

• La classe SwingNode

• Encapsuler un SwingNode

Formation Les nouveautés Java 8 alphorm.com™©

Page 209: Alphorm.com Java 8: les nouveautés

29/10/2015

209

Le contrôle WebView

JavaFX

Formation Les nouveautés Java 8 alphorm.com™©

Le contrôle WebView

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 210: Alphorm.com Java 8: les nouveautés

29/10/2015

210

Plan

• La classe WebView

• Interaction Java/Javascript

Formation Les nouveautés Java 8 alphorm.com™©

Page 211: Alphorm.com Java 8: les nouveautés

29/10/2015

211

La classe WebView

• Classe du package javafx.scene.web

• Gère un WebEngine

Formation Les nouveautés Java 8 alphorm.com™©

Page 212: Alphorm.com Java 8: les nouveautés

29/10/2015

212

Interaction Java/Javascript

• Une application web peut communiquer avec l’application JavaFX

• Le moteur webengine exécute des scripts

• JSObject permet au contraire de déclencher du code Java à partir de JavaScript

Formation Les nouveautés Java 8 alphorm.com™©

Page 213: Alphorm.com Java 8: les nouveautés

29/10/2015

213

Ce qu’on a couvert

• La classe WebView

• Interaction Java/Javascript

Formation Les nouveautés Java 8 alphorm.com™©

Page 214: Alphorm.com Java 8: les nouveautés

29/10/2015

214

Conclusion

Formation Java8

Formation Les nouveautés Java 8 alphorm.com™©

Conclusion

Site : http://www.alphorm.comBlog : http://blog.alphorm.comForum : http://forum.alphorm.com

Fabien BrissonneauConsultant, concepteur et formateurObjets Logiciels

Page 215: Alphorm.com Java 8: les nouveautés

29/10/2015

215

Plan de la formation

• La nouvelle syntaxe

• Les interfaces fonctionnelles

• Le langage

• Les streams

• Les collections

• Les outils

• JavaFX

Formation Les nouveautés Java 8 alphorm.com™©

• Les dates et l’internationalisation

• Concurrence et réseau

Page 216: Alphorm.com Java 8: les nouveautés

29/10/2015

216

Les autres formations dév sur Alphorm

Formation Les nouveautés Java 8 alphorm.com™©

Page 217: Alphorm.com Java 8: les nouveautés

29/10/2015

217

Pour continuer …

• La formation Java fondamentaux …

• La formation Java avancée …

• La formation Android …

Formation Les nouveautés Java 8 alphorm.com™©

Page 218: Alphorm.com Java 8: les nouveautés

29/10/2015

218

Merci d’avoir suivi cette formation,

Formation Les nouveautés Java 8 alphorm.com™©

rendez-vous pour la suite !