Metode Parameter Refleksjon i Java

1. Oversikt

Metode Parameter Reflection support ble lagt til i Java 8. Enkelt sagt, det gir støtte for å få navn på parametere ved kjøretid.

I denne raske opplæringen vil vi se på hvordan du får tilgang til parameternavn for konstruktører og metoder ved kjøretid - ved hjelp av refleksjon.

2. Kompilatorargument

For å kunne få tilgang til metodenavninformasjon, må vi melde deg eksplisitt.

For å gjøre dette, vi spesifiser parametere alternativet under kompilering.

For et Maven-prosjekt kan vi erklære dette alternativet i pom.xml:

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

3. Eksempelklasse

Vi bruker en konstruert Person klasse med en enkelt eiendom kalt fullt navn å demonstrere:

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

4. Bruk

De Parameter klasse er ny i Java 8 og har en rekke interessante metoder. Hvis den -parametere kompilatoralternativet ble gitt, isNamePresent () metoden vil være sann.

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

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

5. Konklusjon

I denne raske artikkelen så vi på den nye refleksjonsstøtten for parameternavn som ble tilgjengelig i Java 8.

Det mest åpenbare bruksområdet for denne informasjonen er å hjelpe til med å implementere automatisk komplett støtte i redaktører.

Som alltid kan kildekoden bli funnet på Github.


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