Methodenparameterreflexion in Java

1. Übersicht

Unterstützung für Methodenparameterreflexion wurde in Java 8 hinzugefügt. Einfach ausgedrückt, bietet es Unterstützung für das Abrufen der Namen von Parametern zur Laufzeit.

In diesem kurzen Tutorial sehen wir uns an, wie Sie zur Laufzeit auf Parameternamen für Konstruktoren und Methoden zugreifen können - mithilfe von Reflection.

2. Compiler-Argument

Um Zugriff auf Informationen zu Methodennamen zu erhalten, müssen wir uns explizit anmelden.

Dazu geben wir bei der Kompilierung die Option parameters an .

Für ein Maven-Projekt können wir diese Option in der Datei pom.xml deklarieren :

 org.apache.maven.plugins maven-compiler-plugin 3.1  1.8 1.8 -parameters   

3. Beispielklasse

Wir werden eine erfundene Personenklasse mit einer einzelnen Eigenschaft namens fullName verwenden , um Folgendes zu demonstrieren:

public class Person { private String fullName; public Person(String fullName) { this.fullName = fullName; } public void setFullName(String fullName) { this.fullName = fullName; } // other methods }

4. Verwendung

Die Parameterklasse ist neu in Java 8 und verfügt über eine Reihe interessanter Methoden. Wenn die Compileroption -parameters angegeben wurde, gibt die Methode isNamePresent () true zurück.

Um auf den Namen eines Parameters zuzugreifen, können wir einfach getName () aufrufen :

@Test public void whenGetConstructorParams_thenOk() throws NoSuchMethodException, SecurityException { List parameters = Arrays.asList(Person.class.getConstructor(String.class).getParameters()); Optional parameter = parameters.stream().filter(Parameter::isNamePresent).findFirst(); assertThat(parameter.get().getName()).isEqualTo("fullName"); } @Test public void whenGetMethodParams_thenOk() throws NoSuchMethodException, SecurityException { List parameters = Arrays.asList( Person.class.getMethod("setFullName", String.class).getParameters()); Optional parameter= parameters.stream() .filter(Parameter::isNamePresent) .findFirst(); assertThat(parameter.get().getName()).isEqualTo("fullName"); }

5. Schlussfolgerung

In diesem kurzen Artikel haben wir uns mit der neuen Reflection-Unterstützung für Parameternamen befasst, die in Java 8 verfügbar wurden.

Der naheliegendste Anwendungsfall für diese Informationen ist die Implementierung der Unterstützung für die automatische Vervollständigung in Editoren.

Wie immer ist der Quellcode auf Github zu finden.