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.