Unterstützung für Methodenparameterreflexion wurde in Java 8 hinzugefügt. Einfach ausgedrückt, bietet es Unterstützung für das Abrufen der Parameternamen 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 auf Informationen zum Methodennamen zugreifen zu können, müssen wir uns explizit anmelden.
Dazu haben wirspecify the parameters option during compilation.
Für ein Maven-Projekt können wir diese Option inpom.xml deklarieren:
Wir werden eine erfundenePerson-Klasse mit einer einzelnen Eigenschaft namensfullName 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. Verwendungszweck
Die KlasseParameter ist neu in Java 8 und verfügt über eine Reihe interessanter Methoden. Wenn die Compileroption-parameters bereitgestellt wurde, gibt die MethodeisNamePresent() true zurück.
Um auf den Namen eines Parameters zuzugreifen, können wir einfachgetName(): 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. Fazit
In diesem kurzen Artikel haben wir uns mit der neuen Reflektionsunterstützung für Parameternamen befasst, die in Java 8 verfügbar wurden.
Der naheliegendste Anwendungsfall für diese Informationen ist die Unterstützung der automatischen Vervollständigung in Editoren.
Wie immer kann der Quellcodeover on Github gefunden werden.