recherche
MaisonJavajavaDidacticielMéthode Java pour obtenir des informations sur le nom du paramètre de méthode dans le code

Avant-propos

Tout le monde sait qu'avec l'utilisation de java8, un nouveau paramètre d'objet a été ajouté à la signature de la méthode correspondante pour représenter des informations de paramètre spécifiques. Le nom du paramètre correspondant peut être obtenu via son getName .C'est-à-dire. , s'il est écrit dans le code, s'il est nommé nom d'utilisateur, alors lors de la transmission des paramètres à la réception, il n'est pas nécessaire d'écrire des annotations telles que @Parameter("username"), et le mappage basé sur le nom peut être effectué directement .

La référence de code suivante est affichée :

public class T {
 private interface T2 {
  void method(String username, String password);
 }
  
 public static void main(String[] args) throws Exception {
  System.out.println(T.class.getMethod("main", String[].class).getParameters()[0].getName());
  System.out.println(T2.class.getMethod("method", String.class, String.class).getParameters()[0].getName());
  System.out.println(T2.class.getMethod("method", String.class, String.class).getParameters()[1].getName());
 }
}

Avant Java8, les informations sur le nom du paramètre pouvaient également être obtenues par certains moyens, mais la méthode était différent. Par exemple, le ParameterMethodNameResolver dans spring mvc peut également fonctionner normalement dans les versions précédentes, mais il nécessite une compilation spéciale. Ce qui fonctionne ici, ce sont LocalVariableTable et MethodParameters, qui sont compilés en tables de variables locales et en tables de paramètres de méthode en chinois.

Table des variables locales LocalVariableTable

Selon la spécification jvm, la table des variables locales existe dans l'attribut Code, et l'attribut Code est un attribut de methodInfo. On peut comprendre que lorsqu'une méthode a une méthode. body, L'attribut Code correspondant apparaîtra, et dans l'attribut code, en plus du code d'exécution spécifique, il y aura également d'autres informations telles que LineNumberTable (utilisée pour décrire l'emplacement de chaque ligne de code

Variables locales Le tableau fait partie des informations de débogage dans la méthode, donc par défaut ces informations ne seront pas générées dans le fichier de classe. Vous devez activer le commutateur -g ou -g:vars Heureusement, pour l'IDE ou. compilation maven, ces commutateurs sont tous activés par défaut. Dans l'IDE, vous pouvez le contrôler en définissant (générer des informations de débogage pour une idée) (coche par défaut dans maven, vous pouvez contrôler s'il faut sortir par debug ou debugLevel dans le plug). -in maven-compiler-plugin. (La valeur par défaut est true).

La table des variables locales est après javap, comme indiqué ci-dessous :

//非静态方法
  LocalVariableTable:
  Start Length Slot Name Signature
   0  1  0 this LT;
   0  1  1 count J
   0  1  3 name Ljava/lang/String;
  
//静态方法
  LocalVariableTable:
  Start Length Slot Name Signature
   0  101  0 args [Ljava/lang/String;

Le La table de variables locales enregistre non seulement les informations sur les paramètres, mais également des variables temporaires qui peuvent être utilisées dans l'ensemble du corps de la méthode, telles que l'int i déclaré, etc. Et comme indiqué ci-dessus, il existe une différence dans la variable this dans le premier place entre la méthode d'expression et la méthode non statique. Par conséquent, vous pouvez lire les paramètres par numéro (method.getParameterCount), puis lire le nombre spécifié d'informations sur les paramètres dans la table des variables locales en fonction de la signature de la méthode

.


Il convient de noter que dans la figure ci-dessus, si le paramètre Il est long ou double et que son emplacement occupe 2 emplacements Lors de l'obtention d'informations sur les paramètres via l'emplacement, vous devez prendre en compte les informations de type du paramètre.

Comme la méthode d'interface n'a pas d'attribut de code, elle n'a pas de table de variables locales. Pour la définition de méthode d'une interface, le nom du paramètre correspondant ne peut pas être obtenu via la table de variables locales

MethodParameters La table des paramètres de méthode

La table des paramètres de méthode a été introduite après la version 1.8, utilisez donc simplement jdk8. Seul le fichier de classe compilé contient ces informations. Contrairement à la table de variables locales, il appartient à l'attribut MethodInfo, qui. c'est-à-dire qu'il est au même niveau que l'attribut Code. Qu'il s'agisse d'une méthode d'interface ou d'une méthode ordinaire, elle a donc cet attribut, même pour les méthodes d'interface, vous pouvez obtenir les informations sur les paramètres correspondants

. Par défaut, il n'y a pas de telles informations dans la classe. Vous devez utiliser des paramètres de compilation spéciaux - des paramètres à générer, et dans ide et maven, ces informations ne seront pas générées par défaut. Dans l'idée, vous devez ajouter ce paramètre de compilation en java. paramètres de ligne supplémentaires. Dans maven, vous devez également ajouter ce paramètre dans le paramètre compilerArgs de maven-compiler-plugin

Le tableau des paramètres de méthode se présente sous la forme suivante après javap :

<.>

//非静态方法
 MethodParameters:
  Name       Flags
  count
  name
  
//静态方法
 MethodParameters:
  Name       Flags
  args
On peut voir que peu importe qu'il soit statique ou non, dans le tableau des paramètres, seuls les paramètres utilisés pour décrire les paramètres apparaîtront. Les paramètres Flags suivants sont utilisés dans certains scénarios spéciaux. , tels que les paramètres finaux pour la réécriture de méthodes, etc.

Quelques outils pouvant être utilisés

En plus d'utiliser l'API native et la boîte à outils Spring, il existe d'autres outils qui peuvent obtenir des informations sur le nom des paramètres Dans le système Spring, l'interface utilisée pour décrire les noms des paramètres est ParameterNameDiscoverer. Grâce à elle, les informations sur le nom des paramètres correspondants peuvent être obtenues. De plus, com.thoughtworks.paranamer:paranamer Le Paranamer de cette boîte à outils peut également traiter les informations correspondantes. , la prise en charge des methodParameters de jdk8 n'est pas très élevée et les utilisateurs peuvent atteindre leurs propres objectifs en l'étendant

Résumé

Ce qui précède est un résumé de la façon dont Java obtient le nom du paramètre de méthode. informations dans le code. J'espère que cela sera utile à tout le monde pour apprendre ou utiliser Java. Si vous avez des questions, vous pouvez laisser un message pour communiquer.

Pour plus d'articles liés à la méthode Java d'obtention des informations sur le nom des paramètres de méthode dans le code, veuillez faire attention au site Web PHP chinois !

Déclaration
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
Comment le sous-système de chargeur de classe du JVM contribue-t-il à l'indépendance de la plate-forme?Comment le sous-système de chargeur de classe du JVM contribue-t-il à l'indépendance de la plate-forme?Apr 23, 2025 am 12:14 AM

Le chargeur de classe garantit la cohérence et la compatibilité des programmes Java sur différentes plates-formes via le format de fichier de classe unifié, le chargement dynamique, le modèle de délégation parent et les bytecode indépendants de la plate-forme et réalisent l'indépendance de la plate-forme.

Le compilateur Java produit-il un code spécifique à la plate-forme? Expliquer.Le compilateur Java produit-il un code spécifique à la plate-forme? Expliquer.Apr 23, 2025 am 12:09 AM

Le code généré par le compilateur Java est indépendant de la plate-forme, mais le code finalement exécuté est spécifique à la plate-forme. 1. Le code source Java est compilé en bytecode indépendant de la plate-forme. 2. Le JVM convertit le bytecode en code machine pour une plate-forme spécifique, garantissant un fonctionnement multiplateforme mais les performances peuvent être différentes.

Comment le JVM gère-t-il le multithreading sur différents systèmes d'exploitation?Comment le JVM gère-t-il le multithreading sur différents systèmes d'exploitation?Apr 23, 2025 am 12:07 AM

Le multithreading est important dans la programmation moderne car elle peut améliorer la réactivité du programme et l'utilisation des ressources et gérer des tâches simultanées complexes. JVM assure la cohérence et l'efficacité des multitheads sur différents systèmes d'exploitation grâce à la cartographie des filetages, au mécanisme de planification et au mécanisme de verrouillage de synchronisation.

Que signifie «l'indépendance de la plate-forme» dans le contexte de Java?Que signifie «l'indépendance de la plate-forme» dans le contexte de Java?Apr 23, 2025 am 12:05 AM

L'indépendance de la plate-forme de Java signifie que le code écrit peut fonctionner sur n'importe quelle plate-forme avec JVM installé sans modification. 1) Le code source Java est compilé en bytecode, 2) ByteCode est interprété et exécuté par le JVM, 3) le JVM fournit des fonctions de gestion de la mémoire et de collecte des ordures pour s'assurer que le programme s'exécute sur différents systèmes d'exploitation.

Les applications Java peuvent-elles encore rencontrer des bogues ou des problèmes spécifiques à la plate-forme?Les applications Java peuvent-elles encore rencontrer des bogues ou des problèmes spécifiques à la plate-forme?Apr 23, 2025 am 12:03 AM

JavaApplicationsCanindeenCounterPlatform-spécificiSUesSuSesSetheTethejvm'sabstraction.reasonsinclude: 1) nativecode et libraires, 2) OperatingSystemdifferences, 3) jvmimplementationvariations, et4) condason

Comment le cloud computing a-t-il un impact sur l'importance de l'indépendance de la plate-forme de Java?Comment le cloud computing a-t-il un impact sur l'importance de l'indépendance de la plate-forme de Java?Apr 22, 2025 pm 07:05 PM

Le cloud computing améliore considérablement l'indépendance de la plate-forme de Java. 1) Le code Java est compilé en bytecode et exécuté par le JVM sur différents systèmes d'exploitation pour assurer le fonctionnement multiplateforme. 2) Utilisez Docker et Kubernetes pour déployer des applications Java pour améliorer la portabilité et l'évolutivité.

Quel rôle la plate-forme de Java a-t-elle joué dans son adoption généralisée?Quel rôle la plate-forme de Java a-t-elle joué dans son adoption généralisée?Apr 22, 2025 pm 06:53 PM

Java'splatformIndependenceNallowsDeveloperstowRiteCodeoncerandUnitonanyDeviceoroswithajvm. ThisisachievedthroughPulingToBytecode, quithejvMinterpretsorcompimentsAtruntime.ThisfeureHassignifant Boosttedjava'sadoptionDuetocross-PlatformDoyment, SplateFor, SplateformDoyment, sadoptionDuetocross-PlatformDoyment, Sendjava'sadoptionDuetocross-PlatformDoyment, Sendjava'sadoptionDuetocross-PlatformDoyment, Sendjava'sadoptionDuetocross-PlatformDoyment, SADOPtiondUtocross-PlatformDoyment, SADOPtiondUetocross-PlatformDoyment.

Comment les technologies de contenerisation (comme Docker) affectent-elles l'importance de l'indépendance de la plate-forme de Java?Comment les technologies de contenerisation (comme Docker) affectent-elles l'importance de l'indépendance de la plate-forme de Java?Apr 22, 2025 pm 06:49 PM

Les technologies de conteneurisation telles que Docker améliorent plutôt que de remplacer l'indépendance de la plate-forme de Java. 1) Assurer la cohérence entre les environnements, 2) Gérer les dépendances, y compris des versions JVM spécifiques, 3) Simplifier le processus de déploiement pour rendre les applications Java plus adaptables et gérables.

See all articles

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux