


Mé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 LocalVariableTableSelon 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 codeVariables 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 argsOn 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ésEn 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é

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 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.

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.

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.

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

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é.

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.

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.


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

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
Éditeur de code facile à utiliser et gratuit

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

SublimeText3 Linux nouvelle version
Dernière version de SublimeText3 Linux