Table des matières
Que sont les méthodes d'extension
Méthode d'écriture traditionnelle :
Utiliser la méthode Stream Writing :
Comment implémenter des méthodes d'extension en Java
Conditions de préparation
Méthodes d'extension d'écriture
Méthode d'extension de tableau
Méthodes statiques étendues
Maison Java javaDidacticiel Quelles sont les méthodes d'extension de fonctionnalités manquantes de Java

Quelles sont les méthodes d'extension de fonctionnalités manquantes de Java

May 20, 2023 pm 04:58 PM
java

    Que sont les méthodes d'extension

    Une méthode d'extension est la possibilité d'"ajouter" des méthodes directement à un type existant sans avoir à créer un nouveau type dérivé, à recompiler ou à modifier d'une autre manière le type existant. Lors de l’appel d’une méthode d’extension, il n’y a aucune différence perceptible par rapport à l’appel de la méthode réellement définie dans le type.

    Pourquoi les méthodes d'extension sont nécessaires

    Envisagez d'implémenter la fonction suivante : après avoir retiré de Redis une chaîne contenant plusieurs ID de produit (chaque ID de produit est séparé par une virgule), déduisez d'abord l'ID de produit (et soyez capable de conserver les éléments commande), et enfin utilisez des virgules pour relier chaque ID de produit.

    Méthode d'écriture traditionnelle :

    Utiliser la méthode Stream Writing :

    Supposons que les méthodes d'extension puissent être implémentées en Java, et que nous ajoutions la méthode d'extension toList pour le tableau (transformons le tableau en List), et ajoutons la méthode d'extension toSet pour List (transformer List en For LinkedHashSet), la méthode d'extension join a été ajoutée à Collection (pour connecter les formes de chaîne des éléments de la collection à l'aide du connecteur donné), nous pourrons alors écrire du code comme celui-ci :

    Je crois vous savez déjà pourquoi vous avez besoin de méthodes d'extension à ce stade Réponse :

    Vous pouvez directement améliorer la bibliothèque de classes existante au lieu d'utiliser des classes d'outils

    Par rapport à l'utilisation de classes d'outils, il est plus fluide et plus confortable d'écrire du code en utilisant la méthode du tapez lui-même

    Le code est plus facile à lire car il s'agit d'appels en chaîne au lieu d'utiliser des poupées imbriquées de méthodes statiques

    Comment implémenter des méthodes d'extension en Java

    Demandons d'abord au ChatGPT récemment populaire :

    Quelles sont les méthodes dextension de fonctionnalités manquantes de Java

    Le point de vue de ChatGPT est que en Java, les méthodes d'extension sont transmises. Implémentées par la méthode statique de la classe d'outils fournie. Je vais donc ensuite présenter une toute nouvelle technologie noire :

    Manifold

    Conditions de préparation

    Manifold et Lombok fonctionnent de la même manière, les deux sont traités au moment de la compilation via le processeur d'annotation. Afin d'utiliser Manifold efficacement, vous devez installer le plug-in Manifold IDEA dans IDEA

    puis ajouter annotationProcessorPaths au maven-compiler-plugin du projet pom :

    Si Lombok est utilisé dans votre projet, vous devez ajoutez Lombok à annotationProcessorPaths :

    Méthodes d'extension d'écriture

    Dans le JDK, la méthode split de String utilise une chaîne comme paramètre, c'est-à-dire String[] split(String). Ajoutons maintenant une méthode d'extension String[] split(char) à String : Split par caractères donnés.

    Écrire des méthodes d'extension basées sur Manifold :

    Vous pouvez trouver des méthodes statiques qui sont essentiellement des classes d'outils, mais il y a certaines exigences :

    Les classes d'outils doivent utiliser l'annotation @Extension de Manifold

    Dans les méthodes statiques, les paramètres du type cible sont requis Utilisez l'annotation @This

    Le nom du package où se trouve la classe d'outils doit se terminer par des extensions. Nom de classe complet du type cible

    —— Les étudiants qui ont utilisé C# souriront probablement en connaissance de cause. méthode d'extension.

    Concernant le point 3, la raison de cette exigence est que Manifold espère trouver rapidement des méthodes d'extension dans le projet, éviter l'analyse des annotations de toutes les classes du projet et améliorer l'efficacité du traitement.

    Avec la possibilité d'étendre les méthodes, nous pouvons désormais l'appeler ainsi :

    Incroyable ! Et vous pouvez constater que System.out.println(numStrs.toString()) imprime en fait la forme de chaîne de l'objet tableau - pas l'adresse de l'objet tableau. Parcourez l'App.class décompilé et observez que l'appel de méthode d'extension a été remplacé par un appel de méthode statique

    Quelles sont les méthodes dextension de fonctionnalités manquantes de Java

    et que la méthode toString du tableau utilise la méthode d'extension définie par Manifold pour le tableau ManArrayExt.toString (@This Object array):

    Quelles sont les méthodes dextension de fonctionnalités manquantes de Java

    [Ljava.lang.String;@511d50c0 Quelque chose comme ça, Au revoir, je ne te reverrai plus jamais~

    Parce que l'appel de méthode d'extension est remplacé par un appel de méthode statique au moment de la compilation, la méthode d'extension de Manifold est used , même si l'objet appelant la méthode est nul, il n'y a pas de problème, car le code traité passe null en paramètre à la méthode statique correspondante. Par exemple, pour étendre Collection :

    Puis lors de l'appel :

    java.lang.NullPointerException, Au revoir, je ne te reverrai plus jamais~

    Méthode d'extension de tableau

    Quelles sont les méthodes dextension de fonctionnalités manquantes de Java

    Nous voyons List écrit comme ceci : @Self est utilisé pour indiquer quel type doit être la valeur annotée. S'il s'agit de @Self, c'est-à-dire @Self(false), cela signifie la valeur annotée. et La valeur de l'annotation @This est du même type ; @Self(true) indique le type des éléments du tableau.

    Pour les tableaux d'objets, on peut voir que la méthode toList renvoie la Liste correspondante (T est le type de l'élément du tableau) :

    Quelles sont les méthodes dextension de fonctionnalités manquantes de Java

    Mais s'il s'agit d'un tableau de type primitif, la valeur de retour indiquée par IDEA est :

    Quelles sont les méthodes dextension de fonctionnalités manquantes de Java

    Mais j'utilise Java. Comment les génériques d'effacement peuvent-ils avoir une fonction aussi intéressante que List ? Vous ne pouvez donc utiliser que des types natifs pour recevoir cette valeur de retour :)

    Quelles sont les méthodes dextension de fonctionnalités manquantes de Java

    — sera bientôt libéré.

    Nous voyons souvent dans divers projets que tout le monde conditionne d'abord un objet en facultatif, puis effectue un filtre, une carte, etc. Grâce au mappage de types de @Self, vous pouvez ajouter une méthode très pratique à Object comme celle-ci :

    Ensuite, tout objet aura la méthode asOpt().

    Par rapport à l'emballage non naturel qui devait être fait auparavant :

    Vous pouvez désormais utiliser Facultatif naturellement :

    Bien sûr, Object est la classe parent de toutes les classes. Que cela soit approprié ou non, vous devez toujours y réfléchir attentivement. .

    Méthodes statiques étendues

    Nous savons tous que Java9 ajoute des méthodes d'usine aux collections :

    N'est-ce pas tentant ? Parce que si vous n'utilisez pas Java 9 et supérieur (Java 8 : montrez-moi simplement votre carte d'identité), vous devez utiliser une bibliothèque comme Guava. Cependant, ImmutableList.of n'est pas aussi bon que List.of utilisé. .

    Cela n’a pas d’importance, a déclaré Manifold : « Cela n’a pas d’importance, je vais agir. » Étendre les méthodes statiques basées sur Manifold consiste à ajouter @Extension à la méthode statique de la classe étendue :

    Ensuite, vous pouvez vous tromper en utilisant une version après Java8 - vous pouvez faire ce que vous voulez, j'utilise Java8 .

    BTW, parce qu'Object est la classe parent de toutes les classes, si vous ajoutez une méthode d'extension statique à Object, cela signifie que vous pouvez accéder directement à cette méthode statique n'importe où sans avoir besoin d'importer - Félicitations, vous êtes débloqué "Top fonctions" .

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

    Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

    Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

    Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

    Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

    Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

    Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

    Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

    Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

    Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

    Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

    Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

    Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

    Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

    Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Feb 07, 2025 pm 12:11 PM

    Spring Boot simplifie la création d'applications Java robustes, évolutives et prêtes à la production, révolutionnant le développement de Java. Son approche "Convention sur la configuration", inhérente à l'écosystème de ressort, minimise la configuration manuelle, allo

    See all articles