Metod Parameter Reflektion i Java

1. Översikt

Metod Parameter Reflection support har lagts till i Java 8. Enkelt uttryckt ger det stöd för att få namnen på parametrar vid körning.

I den här snabbhandledningen tar vi en titt på hur du får åtkomst till parameternamn för konstruktörer och metoder under körning - med hjälp av reflektion.

2. Kompilatorargument

För att kunna få tillgång till information om metodnamn måste vi välja bort detta uttryckligen.

För att göra detta anger vi parametrarna under kompileringen .

För ett Maven-projekt kan vi förklara det här alternativet i pom.xml :

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

3. Exempelklass

Vi använder en konstruerad personklass med en enda egenskap som heter fullName för att visa:

public class Person { private String fullName; public Person(String fullName) { this.fullName = fullName; } public void setFullName(String fullName) { this.fullName = fullName; } // other methods }

4. Användning

Den Parameter klassen är nytt i Java 8 och har en mängd intressanta metoder. Om alternativet kompilator -parametrar tillhandahölls returnerar metoden isNamePresent () true.

För att komma åt namnet på en parameter kan vi helt enkelt ringa getName () :

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

5. Sammanfattning

I den här snabba artikeln tittade vi på det nya reflektionsstödet för parameternamn som blev tillgängliga i Java 8.

Det mest uppenbara användningsfallet för denna information är att hjälpa till att implementera autofullständigt stöd inom redaktörer.

Som alltid kan källkoden hittas på Github.