Méthode Paramètre Reflection en Java

Méthode Paramètre Reflection en Java

1. Vue d'ensemble

Méthode Paramètre La prise en charge de Reflection a été ajoutée à Java 8. En termes simples, il fournit un support pour obtenir les noms de paramètres au moment de l'exécution.

Dans ce rapide didacticiel, nous allons voir comment accéder aux noms de paramètres des constructeurs et des méthodes lors de l'exécution - à l'aide de la réflexion.

2. Argument du compilateur

Pour pouvoir accéder aux informations sur le nom de la méthode, vous devez vous inscrire explicitement.

Pour ce faire, nousspecify the parameters option during compilation.

Pour un projet Maven, nous pouvons déclarer cette option dans lespom.xml:


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

3. Exemple de classe

Nous allons utiliser une classe artificiellePerson avec une seule propriété appeléefullName pour démontrer:

public class Person {

    private String fullName;

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

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

    // other methods
}

4. Usage

La classeParameter est nouvelle dans Java 8 et possède une variété de méthodes intéressantes. Si l'option du compilateur-parameters a été fournie, la méthodeisNamePresent() retournera true.

Pour accéder au nom d'un paramètre, on peut simplement appelergetName():

@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. Conclusion

Dans cet article rapide, nous avons examiné le nouveau support de réflexion pour les noms de paramètres qui est devenu disponible dans Java 8.

Le cas d'utilisation le plus évident de ces informations est d'aider à implémenter une prise en charge de la saisie semi-automatique au sein des éditeurs.

Comme toujours, le code source peut être trouvéover on Github.