Heim >Java >javaLernprogramm >Java-Methode zum Abrufen von Informationen zum Methodenparameternamen im Code
Vorwort
Jeder weiß, dass mit der Verwendung von Java8 ein neuer Objektparameter zur entsprechenden Methodensignatur hinzugefügt wurde, um spezifische Parameterinformationen darzustellen. Der entsprechende Parametername kann über seinen getName abgerufen werden Wenn es im Code geschrieben ist und Benutzername heißt, müssen beim Übergeben von Parametern an der Rezeption keine Anmerkungen wie @Parameter ("Benutzername") geschrieben werden, und die namensbasierte Zuordnung kann direkt durchgeführt werden .
Die folgende Codereferenz wird angezeigt:
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()); } }
Vor Java8 konnten Parameternameninformationen auch auf irgendeine Weise abgerufen werden, aber die Methode war Anders. Beispielsweise kann der ParameterMethodNameResolver in früheren Versionen auch normal funktionieren. Hier sind LocalVariableTable und MethodParameters erforderlich, die in chinesischen Variablentabellen und Methodenparametertabellen kompiliert werden
LocalVariableTable lokale VariablentabelleGemäß der JVM-Spezifikation ist die lokale Variablentabelle im Code-Attribut vorhanden, und das Code-Attribut ist ein Attribut von methodInfo. Dies kann verstanden werden, wenn eine Methode eine Methode hat body, Das entsprechende Code-Attribut wird angezeigt, und im Code-Attribut werden zusätzlich zum spezifischen Ausführungscode auch andere Informationen angezeigt, z. B. LineNumberTable (wird zur Beschreibung der Position jeder Codezeile verwendet). 🎜> Lokale Variablen Die Tabelle ist Teil der Debugging-Informationen in der Methode, daher werden diese Informationen standardmäßig nicht in der Klassendatei generiert. Glücklicherweise müssen Sie für IDE oder Maven-Kompilierung, diese Schalter sind alle standardmäßig aktiviert. In der IDE können Sie sie steuern, indem Sie (Standard-Häkchen) festlegen, ob die Ausgabe per Debug oder DebugLevel erfolgen soll -in Maven-Compiler-Plugin. (Der Standardwert ist true).Die lokale Variablentabelle ist nach Javap, wie unten gezeigt://非静态方法 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;Die Die lokale Variablentabelle speichert nicht nur Parameterinformationen, sondern auch temporäre Variablen, die im gesamten Methodenkörper verwendet werden können, z. B. das deklarierte int i usw. Und wie oben gezeigt, gibt es einen Unterschied zwischen dieser Variablen und der ersten Platz zwischen der Ausdrucksmethode und der nicht statischen Methode. Daher können Sie die Parameter nach Nummer (method.getParameterCount) lesen und dann die angegebene Anzahl von Parameterinformationen in der lokalen Variablentabelle gemäß der Methodensignatur lesen Es ist zu beachten, dass in der obigen Abbildung, wenn der Parameter lang oder doppelt ist und sein Steckplatz 2 Leerzeichen einnimmt, beim Abrufen von Parameterinformationen über den Steckplatz die Typinformationen des Parameters berücksichtigt werden müssen.
Da die Schnittstellenmethode kein Codeattribut hat, verfügt sie nicht über eine lokale Variablentabelle. Zur Methodendefinition einer Schnittstelle kann der entsprechende Parametername nicht über die lokale Variablentabelle abgerufen werden
Es ist ersichtlich, dass in der Parametertabelle unabhängig davon, ob sie statisch ist oder nicht, nur die zur Beschreibung der Parameter verwendeten Parameter angezeigt werden. Die folgenden Flags-Parameter werden in einigen speziellen Szenarien verwendet B. endgültige Parameter für das Umschreiben von Methoden usw.
Einige Tools, die verwendet werden können
Zusätzlich zur Verwendung der nativen API und des Spring-Toolkits gibt es andere Tools, die Informationen zu Parameternamen abrufen können Im Spring-System ist die zum Beschreiben von Parameternamen verwendete Schnittstelle ParameterNameDiscoverer. Darüber hinaus kann com.thoughtworks.paranamer:paranamer auch entsprechende Informationen verarbeiten , die Unterstützung für die Methodenparameter von jdk8 ist nicht sehr hoch, und Benutzer können ihre eigenen Zwecke erreichen, indem sie sie erweitern
//非静态方法 MethodParameters: Name Flags count name //静态方法 MethodParameters: Name Flags args
Zusammenfassung
Das Obige ist eine Zusammenfassung, wie Java den Methodenparameternamen erhält Ich hoffe, dass die Informationen im Code für alle beim Erlernen oder Verwenden von Java hilfreich sind. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.
Weitere Artikel zu Javas Methode zum Abrufen von Informationen zu Methodenparameternamen im Code finden Sie auf der chinesischen PHP-Website!