JavaRush /Blog Java /Random-FR /10 fonctionnalités Java 8 dont vous n'avez pas entendu pa...

10 fonctionnalités Java 8 dont vous n'avez pas entendu parler.

Publié dans le groupe Random-FR
Lambda, lambda, lambda. C'est tout ce dont vous entendez parler lorsque les gens parlent de Java 8. Mais ce n'est qu'une partie. Java 8 a beaucoup de nouvelles fonctionnalités - de nouvelles classes et idiomes puissants, et d'autres simplement des choses qui auraient dû être là depuis le début. J'avais envie de passer à dix nouvelles fonctionnalités que je considère comme des petits joyaux qui valent vraiment la peine d'être connues. Il y en a sûrement au moins un ou deux parmi eux que vous aimeriez essayer, alors commençons ! 1) Méthodes par défaut. Nouveauté du langage Java, vous pouvez désormais ajouter des corps de méthode aux interfaces ( méthodes par défaut ). Ces méthodes sont ajoutées sans condition à toutes les classes qui implémentent ces interfaces. Cela vous donne la possibilité d'ajouter de nouvelles fonctionnalités aux bibliothèques existantes sans casser l'ancien code. C'est certainement un plus. D'un autre côté, cela brouille sérieusement la frontière entre l'interface, qui oblige à respecter certaines conditions comme convention, et la classe qui les suit, comme son implémentation privée. Entre de bonnes mains, cela peut être un moyen élégant de rendre les interfaces plus intelligentes, d’éviter les répétitions et d’étendre les bibliothèques. Entre de mauvaises mains ; nous verrons bientôt des méthodes dans les interfaces qui appellent cela et le convertissent en un type concret. Brrr.... 2) Arrêt des processus. Démarrer un processus supplémentaire est l'une des choses que vous faites en sachant à moitié que vous reviendrez (déboguer) pour le déboguer lorsque le processus (craque) (plante) abandonne, (se bloque) se bloque ou utilise 100 % du processeur. La classe Process est désormais dotée de deux nouvelles méthodes pour vous aider à contrôler les processus indisciplinés. Le premier, isAlive() , vous permet de vérifier facilement si un processus est en cours d'exécution sans avoir à l'attendre. Le deuxième et plus puissant (avertissement !) est destroyForcably() , qui vous permet d'arrêter (sans vergogne) avec force (tuer) un processus qui a dépassé son temps (en attente ou non) ou qui n'est plus nécessaire. 3) StampedLock. Passons maintenant à quelque chose de vraiment excitant. Personne n'aime synchroniser le code. C'est un moyen infaillible de ralentir les performances de votre application (surtout à grande échelle) ou pire, de la geler. Et pourtant, parfois, on n’a tout simplement pas le choix. Il existe de nombreuses expressions idiomatiques pour synchroniser l'accès multithread à une ressource. L’un des plus appréciés est ReadWriteLock et les implémentations associées. Cet idiome réduit les conflits en permettant à plusieurs threads d'utiliser une ressource tout en bloquant uniquement les threads qui la manipulent. Cela semble génial, mais en pratique, ce verrou est tellement lent , surtout avec un grand nombre de threads d'écriture. Cela s'est avéré si grave que Java 8 a introduit un nouveau RWLock appelé StampedLock . Ce verrou est non seulement plus rapide, mais offre également une API puissante pour le verrouillage optimiste, où vous pouvez obtenir un verrou en lecture à faible coût, en espérant qu'aucune opération d'écriture ne se produise pendant les sections critiques du code. À la fin de la section, vous demandez au verrou si l'enregistrement a eu lieu pendant cette période, auquel cas vous pouvez décider de réessayer, d'augmenter le verrouillage ou d'abandonner. Cette serrure est un outil puissant et mérite un article à elle seule. Je suis vraiment excité par ce nouveau jouet. Super! De plus, vous pouvez lire Ici . 4) Enregistreurs concurrents. C'est un autre petit bijou pour tous ceux qui exécutent des applications multithread. Une nouvelle API simple et efficace pour lire et écrire des compteurs à partir de plusieurs threads. Parfois, c'est encore plus rapide que d'utiliser AtomicIntegers. Assez impressionnant! 5) Valeurs facultatives (ou facultatives). Oh, les pointeurs nuls, un casse-tête pour tous les développeurs Java. Peut-être la plus populaire de toutes les exceptions, elle existe depuis des temps très anciens. Au moins depuis 1965 . Empruntant à Scala et Haskell, Java 8 dispose d'un nouveau modèle, appelé Facultatif, pour encapsuler les références qui peuvent être nulles. Il ne s'agit en aucun cas d'une solution miracle qui supprimera null, mais plutôt d'un moyen pour les concepteurs d'API d'indiquer au niveau du code (au lieu de la documentation) qu'une valeur null peut être renvoyée ou transmise à la méthode, et que l'appelant doit préparez-vous à cela. Cela ne fonctionnera donc que pour les nouvelles API, à condition que les appelants ne permettent pas à la référence de s'échapper du wrapper, où elle pourrait être déréférencée de manière dangereuse. Je dois dire que je suis assez ambivalent à propos de cette fonctionnalité. D’une part, les valeurs nulles restent un énorme problème, j’apprécie donc tout ce qui a été fait pour le résoudre. D’un autre côté, je suis assez sceptique quant à la réussite de cette initiative. En effet, l’utilisation d’Optional nécessite un effort soutenu de la part de l’ensemble de l’entreprise et a peu d’impact immédiat. Sans une stricte application de la loi, il y a de fortes chances que la route reste du côté gauche de la route. En savoir plus sur Facultatif . 6) Annotez tout. Autre petite avancée du langage Java : des annotations peuvent être ajoutées à presque tout dans votre code. Auparavant, les annotations ne pouvaient être ajoutées qu'à des éléments tels que des classes ou des déclarations de méthodes. Depuis Java 8, des annotations peuvent être ajoutées aux déclarations de variables et de paramètres, lors de la conversion d'une valeur en un type spécifique, ou même de l'allocation d'un nouvel objet. Cela fait partie d'un effort concentré (accompagné d'améliorations des outils et API JavaDoc) visant à rendre le langage plus convivial pour les outils d'analyse et de mesure statiques (tels que FindBugs). C'est une fonctionnalité intéressante, mais tout comme InvokeDynamic introduit dans Java 7, sa valeur réelle dépendra de ce que la société en fera. 7) Opérations de débordement. Maintenant, voici un ensemble de méthodes, qui aurait dû faire partie de la bibliothèque principale dès le premier jour. Mon passe-temps préféré est de déboguer les débordements numériques lorsque les entiers dépassent 2 ^ 32, et de créer les erreurs les plus désagréables et les plus inattendues (c'est-à-dire "comment diable puis-je obtenir cette valeur étrange?"). Encore une fois, il n'y a pas de solution miracle ici, mais il existe de nombreuses fonctions pour manipuler les nombres qui sont rejetés lorsqu'ils débordent d'une manière moins indulgente que votre opérateur +/* standard, qui déborde sans condition. 8) Parcourez le catalogue. Parcourir le contenu d'une arborescence de répertoires est depuis longtemps l'une des choses que les gens recherchent sur Google (auquel cas il vous sera probablement conseillé d'utiliser Apache.FileUtils). Java 8 donne un coup de jeune à la classe Files avec dix nouvelles méthodes. Mon préféré est walk() , qui crée un thread paresseux (important pour les grands systèmes de fichiers) pour parcourir le contenu d'une structure de répertoires. 9) Forte génération aléatoire. De nos jours, on ne manque pas de discussions sur la vulnérabilité des mots de passe et des clés. La sécurité logicielle est une activité complexe et sujette aux erreurs. C'est pourquoi j'aime la nouvelle méthode SecureRandom. getinstanceStrong() , qui sélectionne automatiquement le générateur aléatoire le plus puissant disponible pour la machine virtuelle Java. Cela réduit les chances que vous échouiez ou que vous ayez un générateur faible, ce qui rendra les clés et les valeurs cryptées plus sensibles au piratage. 10. Date.toInstant(). Java 8 introduit une toute nouvelle API pour les dates et les heures . C’est assez compréhensible puisque celui existant n’est pas très bon. Joda s'oriente essentiellement depuis plusieurs années vers une API Java pour les dates et les heures. Cependant, même avec la nouvelle API, un gros problème demeure : il existe une tonne de code et de bibliothèques utilisant l'ancienne API. Et nous savons tous qu’ils sont là pour rester. Donc que feras-tu? Pour y parvenir, Java 8 a fait quelque chose d'assez élégant en ajoutant une nouvelle méthode à la classe Date appelée toInstant() qui la convertit en une nouvelle API. Cela vous permet de passer rapidement à la nouvelle API, même lorsque vous travaillez avec du code qui utilise l'ancienne API de date (et continuera de le faire dans un avenir prévisible).
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION