Отражение параметра метода в Java

Отражение параметра метода в Java

1. обзор

Параметр метода Поддержка отражения была добавлена ​​в Java 8. Проще говоря, он обеспечивает поддержку для получения имен параметров во время выполнения.

В этом кратком руководстве мы рассмотрим, как получить доступ к именам параметров для конструкторов и методов во время выполнения - с помощью отражения.

2. Аргумент компилятора

Чтобы иметь возможность получить доступ к информации об имени метода, мы должны явно подписаться.

Для этого мыspecify the parameters option during compilation.

Для проекта Maven мы можем объявить эту опцию вpom.xml:


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

3. Пример класса

Мы будем использовать надуманный класс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.

Наиболее очевидный вариант использования этой информации - помочь реализовать поддержку автозаполнения в редакторах.

Как всегда, исходный код можно найтиover on Github.