Nie ma wsparcia językowego, aby zrobić to, o co prosisz.
Możesz w sposób refleksyjny uzyskiwać dostęp do elementów członkowskich typu w czasie wykonywania za pomocą refleksji (np. Za pomocą, Class.getDeclaredFields()
aby uzyskać tablicę Field
), ale w zależności od tego, co próbujesz zrobić, może to nie być najlepsze rozwiązanie.
Zobacz też
Powiązane pytania
Przykład
Oto prosty przykład, który pokazuje tylko część tego, do czego zdolna jest refleksja.
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()
);
}
}
}
Powyższy fragment wykorzystuje odbicie, aby sprawdzić wszystkie zadeklarowane pola class String
; generuje następujący wynik:
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
Efektywna Java 2. wydanie, pozycja 53: Preferuj interfejsy do refleksji
Oto fragmenty książki:
Mając Class
obiekt, możesz uzyskać Constructor
, Method
i Field
instancje reprezentujące konstruktory, metody i pola tej klasy. [Umożliwiają] refleksyjną manipulację ich podstawowymi odpowiednikami . Ta moc ma jednak swoją cenę:
- Utracisz wszystkie korzyści płynące ze sprawdzania w czasie kompilacji.
- Kod wymagany do wykonania refleksyjnego dostępu jest niezgrabny i rozwlekły.
- Cierpi na tym wydajność.
Z reguły dostęp do obiektów nie powinien być odzwierciedlany w normalnych aplikacjach w czasie wykonywania.
Istnieje kilka wyrafinowanych aplikacji, które wymagają refleksji. Przykłady obejmują [... celowo pominięte ...] Jeśli masz jakiekolwiek wątpliwości, czy Twoje zgłoszenie należy do jednej z tych kategorii, prawdopodobnie tak nie jest.