Параметр метода Поддержка отражения была добавлена в Java 8. Проще говоря, он обеспечивает поддержку для получения имен параметров во время выполнения.
В этом кратком руководстве мы рассмотрим, как получить доступ к именам параметров для конструкторов и методов во время выполнения - с помощью отражения.
2. Аргумент компилятора
Чтобы иметь возможность получить доступ к информации об имени метода, мы должны явно подписаться.
Для этого мыspecify the parameters option during compilation.
Для проекта Maven мы можем объявить эту опцию вpom.xml:
Мы будем использовать надуманный классPerson с единственным свойством под названиемfullName, чтобы продемонстрировать:
public class Person {
private String fullName;
public Person(String fullName) {
this.fullName = fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
// other methods
}
4. использование
КлассParameter появился впервые в Java 8 и имеет множество интересных методов. Если была указана опция компилятора-parameters, методisNamePresent() вернет true.
Чтобы получить доступ к имени параметра, мы можем просто вызвать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. Заключение
В этой быстрой статье мы рассмотрели новую поддержку отражений для имен параметров, которая стала доступна в Java 8.
Наиболее очевидный вариант использования этой информации - помочь реализовать поддержку автозаполнения в редакторах.