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 implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Mar 17, 2025 pm 05:44 PM

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Comment puis-je implémenter des techniques de programmation fonctionnelle en Java?Comment puis-je implémenter des techniques de programmation fonctionnelle en Java?Mar 11, 2025 pm 05:51 PM

Cet article explore l'intégration de la programmation fonctionnelle dans Java à l'aide d'expressions Lambda, de flux API, de références de méthode et facultatif. Il met en évidence des avantages tels que l'amélioration de la lisibilité au code et de la maintenabilité grâce à la concision et à l'immuabilité

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Mar 17, 2025 pm 05:35 PM

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Mar 17, 2025 pm 05:43 PM

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Mar 17, 2025 pm 05:46 PM

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

Comment utiliser l'API NIO (nouvelle entrée / sortie) de Java pour les E / S non bloquantes?Comment utiliser l'API NIO (nouvelle entrée / sortie) de Java pour les E / S non bloquantes?Mar 11, 2025 pm 05:51 PM

Cet article explique l'API NIO de Java pour les E / S non bloquantes, à l'aide de sélecteurs et de canaux pour gérer efficacement plusieurs connexions avec un seul thread. Il détaille le processus, les avantages (évolutivité, performance) et les pièges potentiels (complexité,

How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

Comment utiliser l'API Sockets de Java pour la communication réseau?Comment utiliser l'API Sockets de Java pour la communication réseau?Mar 11, 2025 pm 05:53 PM

Cet article détaille l'API Socket de Java pour la communication réseau, couvrant la configuration du serveur client, la gestion des données et les considérations cruciales telles que la gestion des ressources, la gestion des erreurs et la sécurité. Il explore également les techniques d'optimisation des performances, je

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

SublimeText3 version Mac

SublimeText3 version Mac

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

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux