Non c'è supporto linguistico per fare ciò che chiedi.
È possibile accedere in modo riflessivo ai membri di un tipo in fase di esecuzione utilizzando la riflessione (ad esempio con Class.getDeclaredFields()
per ottenere un array di Field
), ma a seconda di ciò che si sta tentando di fare, questa potrebbe non essere la soluzione migliore.
Guarda anche
Domande correlate
Esempio
Ecco un semplice esempio per mostrare solo alcune delle cose che la riflessione è in grado di fare.
import java.lang.reflect.*;
public class DumpFields {
public static void main(String[] args) {
inspect(String.class);
}
static <T> void inspect(Class<T> klazz) {
Field[] fields = klazz.getDeclaredFields();
System.out.printf("%d fields:%n", fields.length);
for (Field field : fields) {
System.out.printf("%s %s %s%n",
Modifier.toString(field.getModifiers()),
field.getType().getSimpleName(),
field.getName()
);
}
}
}
Lo snippet di cui sopra utilizza la riflessione per ispezionare tutti i campi dichiarati di class String
; produce il seguente output:
7 fields:
private final char[] value
private final int offset
private final int count
private int hash
private static final long serialVersionUID
private static final ObjectStreamField[] serialPersistentFields
public static final Comparator CASE_INSENSITIVE_ORDER
Effective Java 2nd Edition, Item 53: Preferisci le interfacce alla reflection
Questi sono estratti dal libro:
Dato un Class
oggetto, è possibile ottenere Constructor
, Method
e Field
istanze che rappresentano i costruttori, i metodi e i campi della classe. [Loro] ti permettono di manipolare le loro controparti sottostanti in modo riflessivo . Questo potere, tuttavia, ha un prezzo:
- Perdi tutti i vantaggi del controllo in fase di compilazione.
- Il codice richiesto per eseguire l'accesso riflessivo è goffo e dettagliato.
- Le prestazioni ne risentono.
Di norma, non si dovrebbe accedere agli oggetti in modo riflessivo nelle normali applicazioni in fase di runtime.
Esistono alcune applicazioni sofisticate che richiedono una riflessione. Gli esempi includono [... omesso di proposito ...] Se hai dei dubbi sul fatto che la tua applicazione rientri in una di queste categorie, probabilmente non è così.