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.