Methode Parameterreflectie in Java

1. Overzicht

Methode Parameter Reflection-ondersteuning is toegevoegd in Java 8. Simpel gezegd, het biedt ondersteuning voor het verkrijgen van de namen van parameters tijdens runtime.

In deze korte tutorial bekijken we hoe je toegang krijgt tot parameternamen voor constructors en methoden tijdens runtime - met behulp van reflectie.

2. Compiler-argument

Om toegang te krijgen tot gegevens over de naam van de methode, moeten we ons expliciet aanmelden.

Om dit te doen, we specificeer de parameters optie tijdens compilatie.

Voor een Maven-project kunnen we deze optie aangeven in het pom.xml:

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

3. Voorbeeldklasse

We gebruiken een gekunsteld Persoon klasse met een enkele eigenschap genaamd voor-en achternaam laten zien:

openbare klasse Persoon {privé String fullName; openbare persoon (String fullName) {this.fullName = fullName; } public void setFullName (String fullName) {this.fullName = fullName; } // andere methodes }

4. Gebruik

De Parameter class is nieuw in Java 8 en heeft een verscheidenheid aan interessante methoden. Als het -parameters compiler-optie was voorzien, de isNamePresent () methode retourneert true.

Om toegang te krijgen tot de naam van een parameter, kunnen we gewoon bellen getName ():

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

5. Conclusie

In dit korte artikel hebben we gekeken naar de nieuwe reflectieondersteuning voor parameternamen die beschikbaar kwam in Java 8.

De meest voor de hand liggende use case voor deze informatie is het helpen implementeren van auto-complete ondersteuning binnen editors.

Zoals altijd is de broncode te vinden op Github.