Maison > Java > javaDidacticiel > Méthode Java pour obtenir des informations sur le nom du paramètre de méthode dans le code

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

高洛峰
Libérer: 2017-01-22 10:46:02
original
2733 Les gens l'ont consulté

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());
 }
}
Copier après la connexion

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;
Copier après la connexion

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
Copier après la connexion
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 !

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal