Metodo Parametro Reflection in Java

1. Panoramica

Il supporto Method Parameter Reflection è stato aggiunto in Java 8. In poche parole, fornisce supporto per ottenere i nomi dei parametri in fase di esecuzione.

In questo breve tutorial, daremo un'occhiata a come accedere ai nomi dei parametri per costruttori e metodi in fase di esecuzione, utilizzando la reflection.

2. Argomento del compilatore

Per poter accedere alle informazioni sul nome del metodo, è necessario eseguire esplicitamente il consenso esplicito.

Per fare ciò, specifichiamo l' opzione parametri durante la compilazione .

Per un progetto Maven, possiamo dichiarare questa opzione nel pom.xml :

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

3. Classe di esempio

Useremo una classe Person artificiosa con una singola proprietà chiamata fullName per dimostrare:

public class Person { private String fullName; public Person(String fullName) { this.fullName = fullName; } public void setFullName(String fullName) { this.fullName = fullName; } // other methods }

4. Utilizzo

La classe Parameter è nuova in Java 8 e ha una varietà di metodi interessanti. Se è stata fornita l'opzione del compilatore -parameters , il metodo isNamePresent () restituirà true.

Per accedere al nome di un parametro, possiamo semplicemente chiamare 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. conclusione

In questo breve articolo, abbiamo esaminato il nuovo supporto di riflessione per i nomi dei parametri che è diventato disponibile in Java 8.

Il caso d'uso più ovvio per queste informazioni è aiutare a implementare il supporto del completamento automatico all'interno degli editor.

Come sempre, il codice sorgente può essere trovato su Github.