Es gibt keine sprachliche Unterstützung, um das zu tun, wonach Sie fragen.
Sie können zur Laufzeit reflektierend auf die Mitglieder eines Typs zugreifen, indem Sie Reflection verwenden (z. B. Class.getDeclaredFields()
um ein Array von zu erhalten Field
). Je nachdem, was Sie tun möchten, ist dies möglicherweise nicht die beste Lösung.
Siehe auch
Verwandte Fragen
Beispiel
Hier ist ein einfaches Beispiel, um nur einen Teil dessen zu zeigen, wozu Reflexion in der Lage ist.
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()
);
}
}
}
Das obige Snippet verwendet Reflexion, um alle deklarierten Felder von zu untersuchen class String
. es erzeugt die folgende Ausgabe:
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
Effektive Java 2nd Edition, Punkt 53: Schnittstellen der Reflexion vorziehen
Dies sind Auszüge aus dem Buch:
Bei einem Class
Objekt können Sie erhalten Constructor
, Method
und Field
Instanzen , die die Konstrukteure, Methoden und Felder der Klasse. Mit [Sie] können Sie die zugrunde liegenden Gegenstücke reflektierend manipulieren . Diese Kraft hat jedoch ihren Preis:
- Sie verlieren alle Vorteile der Überprüfung zur Kompilierungszeit.
- Der Code, der für den reflektierenden Zugriff erforderlich ist, ist ungeschickt und ausführlich.
- Die Leistung leidet.
In der Regel sollte zur Laufzeit in normalen Anwendungen nicht reflektierend auf Objekte zugegriffen werden.
Es gibt einige anspruchsvolle Anwendungen, die Reflexion erfordern. Beispiele sind [... absichtlich weggelassen ...] Wenn Sie Zweifel haben, ob Ihre Bewerbung in eine dieser Kategorien fällt, ist dies wahrscheinlich nicht der Fall.