Java 8 : Les nouveautés

Utiliser les références de méthodes

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Les références de méthodes sont très utiles lorsque vous voulez simplement présenter une méthode à un algorithme, sans créer une nouvelle classe.

Transcription

Dans cette vidéo nous allons évoquer les références de méthodes. Alors de quoi s'agit-il ? Pour mettre en place donc une démonstration sur les références de méthode, je vais commencer par créer une classe que je vais appeler la classe personne. Je vais donc avoir sur cette personne un âge, et une méthode GetAge, donc un accesseur, en fait, sur cet âge GetAge, qui se contentera de retourner l'âge, qui est par ailleurs privé sur la personne. J'ai bien entendu aussi le constructeur de la personne, qui permet de donner entre autres informations, sans doute son âge. Un code assez classique façon Java 7. Et je vais rajouter une comparaison entre 2 personnes. Alors cette comparaison entre 2 personnes me dit qui est la personne la plus grande, avec donc une méthode que je vais appeler pompeusement compare. Je prends donc une première personne en premier paramètre. Et la première personne donc sera la personne de gauche et deuxième paramètre, une deuxième personne, une personne à droite, donc l'équivalent d'un opérateur de comparaison dans d'autres langages qu'en Java on représente par cette fonction de comparaison. En général d'ailleurs on pourrait peut être l'appeler compareTo. En fait, je vais comparer la personne de gauche à la personne de droite. Et je vais retourner en fait la différence entre l'âge de la personne de gauche et la personne de droite, ce qui pourrait se faire tout simplement en faisant donc return de g.age-d.age. Donc là j'obtiens en fait une relation d'ordre entre les personnes qui consiste tout simplement à savoir, à obtenir un entier négatif lorsque la personne de droite est supérieure à la personne de gauche, et un entier positif lorsque la personne de gauche est plus âgée que la personne de droite, et une valeur de zéro évidemment lorsque les 2 âges sont les mêmes. Maintenant je vais travailler au niveau du main sur 2 objets personne, donc une personne qui est moi new Personne, que je construis avec un certain âge. Ensuite une autre personne elle new Personne, que je construis avec un autre âge. Maintenant je vais ranger dans un tableau ces 2 objets personne, donc je vais construire un tableau de personne: personne [ ] lesGens = new Personne [2] on va dire, et lesGens [0] = moi. LesGens [1] = elle. Un code pour l'instant sans originalité. Maintenant l'originalité c'est que se passe-t-il pour trier ce tableau? Sur la classe Arrays, vous avez plusieurs algorithmes de tri, dont un qui m'intéresse tout particulièrement, qui est l'algorithme de tri sort qui prend en paramètre le tableau que vous allez trier, et ensuite ici un comparateur d'objets. Ici donc on a plusieurs possibilités: une première possibilité bien entendu est de créer un objet comparateur qui va prendre chacun des objets et les trier les uns après les autres. Donc ici, je vais -comparateur- créer un objet comparateur de personnes qui correspond -new ComparateurDePersonne-. Alors bien entendu cette classe ComparteurDePersonne il faut venir la créer. des relations d'ordre que l'on veut introduire dans le code, donc vous allez créer votre classe comparateur de personnes. Ce que réclame ici l'algorithme sort, c'est que votre comparateur implémente comparator. Donc c'est ce que je vais faire. Implements Comparator. Ici implements Donc là ici, Import pour Java util comparator, puis bien entendu l'obligation d'implémenter les méthodes abstraites de comparator qui est donc compare ici avec 2 object en paramètre. La comparaison entre ces 2 objets va consister tout simplement à prendre l'objet p1 comme Personnne o1. L'objet o2 en fait en tant que p2 parce ce que la en fait ce que je veux, c'est accéder à la méthode compare à, qui se trouve sur la classe personne, et je fais un return de p1.compare p2. Ici, je vais récupérer donc les 2 objets personne. En fait cette méthode compare, compare a que j'ai sur la personne ici, je vais en faire une autre version, pour montrer toutes les possibilités. Je pourrais aussi bien entendu comparer this avec la personne de droite. Donc dans ce cas-là mon comparateur ici prend p1 et compare p1 avec p2. Au niveau du code en fait on compare le this avec la personne de droite. Dans le cas de la première méthode compare que j'avais réalisée d'ailleurs, je peux très bien la réaliser en tant que statique, puisqu'effectivement je n'ai pas besoin du contexte d'objet local, le this. Et donc ici, au niveau de ma comparaison, je vais trier donc mon tableau lesGens en fournissant un opérateur de personnes en fonction de l'âge. Donc maintenant je vais pouvoir faire afficher le contenu de mon tableau, donc avec un simple for, for Personne p, que je trouve dans le tableau lesGens. Je fais afficher System.out.println, je fais afficher println la personne en question. Si j'exécute mon code effectivement, j'obtiens donc les personnes, alors évidemment avec peut être un petit accès à l'âge. Sinon je vais avoir un affichage qui est assez basique donc 46 47 effectivement, je commence par le plus petit, alors que normalement j'avais mis moi avec 47 avant elle qui était en 46. Et donc en fait avec les références de méthode maintenant, ce que je peux faire, c'est non plus avoir absolument à créer un objet comparateur de personnes, mais tout simplement appeler sur la classe personne, avec l'opérateur de résolution de portée :: la méthode compare à, directement je balance. Donc je peux utiliser maintenant la référence à la méthode compare à directement à la place d'une instance du comparateur de personnes. Ici j'ai encore une ambigüité dûe à mes 2 méthodes statiques. Donc effectivement il est possible en Java d'utiliser les 2 implémentations. Donc ici je fais disparaître l'ambigüité en supprimant la méthode statique, mais ceci est une référence qui pourrait très bien être utilisée pour la méthode statique. Donc je ré-exécute pour montrer que ça marche. Ce n'est pas seulement que syntaxiquement c'est correct. Et là on a finalement l'équivalent de ce que les développeurs C++ pourraient appeler des adresses de fonction. En fait il s'agit d'une référence de méthode et ici, c'est appliqué sur une méthode qui est une méthode d'instance. Je pourrais l'appliquer aussi sur des méthodes statiques sans aucun problème. C'est ce qui se passe d'ailleurs

Java 8 : Les nouveautés

Découvrez les nouveautés introduites par la version 8 de Java. Voyez les expressions lambda, les références de méthodes, les méthodes par défaut dans les interfaces, etc.

1h44 (21 vidéos)
Aucun commentaire n´est disponible actuellement
Logiciel :
Spécial abonnés
Date de parution :17 août 2015

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !