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.