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:
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.