Reflexão de Parâmetro de Método em Java

Reflexão de Parâmetro de Método em Java

1. Visão geral

O método Method Parameter Reflection foi adicionado no Java 8. Simplificando, ele fornece suporte para obter os nomes dos parâmetros em tempo de execução.

Neste tutorial rápido, vamos dar uma olhada em como acessar nomes de parâmetros para construtores e métodos em tempo de execução - usando reflexão.

2. Argumento do Compilador

Para ter acesso às informações do nome do método, precisamos nos inscrever explicitamente.

Para fazer isso, nósspecify the parameters option during compilation.

Para um projeto Maven, podemos declarar esta opção nopom.xml:


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

3. Classe de exemplo

Usaremos uma classePerson inventada com uma única propriedade chamadafullName para demonstrar:

public class Person {

    private String fullName;

    public Person(String fullName) {
        this.fullName = fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    // other methods
}

4. Uso

A classeParameter é nova no Java 8 e possui uma variedade de métodos interessantes. Se a opção de compilador-parameters foi fornecida, o métodoisNamePresent() retornará verdadeiro.

Para acessar o nome de um parâmetro, podemos simplesmente chamargetName():

@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. Conclusão

Neste artigo rápido, vimos o novo suporte de reflexão para nomes de parâmetros que se tornaram disponíveis no Java 8.

O caso de uso mais óbvio para essas informações é ajudar a implementar o suporte de preenchimento automático nos editores.

Como sempre, o código-fonte pode ser encontradoover on Github.