Metode Parameter Refleksion i Java

1. Oversigt

Metode Parameter Reflection support blev tilføjet i Java 8. Simpelthen giver det support til at få navnene på parametre ved kørselstid.

I denne hurtige vejledning ser vi på, hvordan du får adgang til parameternavne til konstruktører og metoder under kørsel - ved hjælp af refleksion.

2. Kompilatorargument

For at være i stand til at få adgang til metodens navnoplysninger skal vi eksplicit tilmelde dig.

For at gøre dette, vi angive parametre mulighed under kompilering.

For et Maven-projekt kan vi erklære denne mulighed i pom.xml:

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

3. Eksempel klasse

Vi bruger en konstrueret Person klasse med en enkelt egenskab kaldet fulde navn at demonstrere:

offentlig klasse person {privat streng fuldnavn; offentlig person (streng fuldnavn) {this.fullName = fuldnavn; } public void setFullName (String fullName) {this.fullName = fullName; } // andre metoder}

4. Anvendelse

Det Parameter klasse er ny i Java 8 og har en række spændende metoder. Hvis den -parametre kompilator mulighed blev leveret, isNamePresent () metoden vender tilbage sandt.

For at få adgang til navnet på en parameter kan vi bare ringe getName ():

@Test offentlig ugyldig nårGetConstructorParams_thenOk () kaster NoSuchMethodException, SecurityException {Listeparametre = Arrays.asList (Person.class.getConstructor (String.class) .getParameters ()); Valgfri parameter = parameters.stream (). Filter (Parameter :: isNamePresent) .findFirst (); assertThat (parameter.get (). getName ()). isEqualTo ("fullName"); } @Test offentligt ugyldigt nårGetMethodParams_thenOk () kaster NoSuchMethodException, SecurityException {Listeparametre = Arrays.asList (Person.class.getMethod ("setFullName", String.class) .getParameters ()); Valgfri parameter = parameters.stream () .filter (Parameter :: isNamePresent) .findFirst (); assertThat (parameter.get (). getName ()). isEqualTo ("fullName"); }

5. Konklusion

I denne hurtige artikel kiggede vi på den nye refleksionsunderstøttelse af parameternavne, der blev tilgængelige i Java 8.

Den mest åbenlyse anvendelse af disse oplysninger er at hjælpe med at implementere automatisk komplet support i redaktører.

Som altid kan kildekoden findes på Github.


$config[zx-auto] not found$config[zx-overlay] not found