Нет лингвистической поддержки, чтобы сделать то, о чем вы просите.
Вы можете рефлексивно обращаться к членам типа во время выполнения, используя отражение (например, с помощью Class.getDeclaredFields()для получения массива Field), но в зависимости от того, что вы пытаетесь сделать, это может быть не лучшим решением.
Смотрите также
Связанные вопросы
пример
Вот простой пример, показывающий лишь часть того, на что способно отражение.
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()
);
}
}
}
В приведенном выше фрагменте кода используется отражение для проверки всех объявленных полей class String; он производит следующий вывод:
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
Эффективное Java 2-е издание, Правило 53: Предпочитайте интерфейсы отражению
Это отрывки из книги:
Для данного Classобъекта вы можете получить Constructor, Methodи Fieldэкземпляры, представляющие конструкторы, методы и поля класса. [Они] позволяют вам рефлексивно манипулировать своими основными собратьями . Однако эта сила имеет свою цену:
- Вы теряете все преимущества проверки во время компиляции.
- Код, необходимый для выполнения рефлексивного доступа, громоздок и многословен.
- Страдает производительность.
Как правило, в обычных приложениях во время выполнения объекты не должны подвергаться рефлексивному доступу.
Есть несколько сложных приложений, требующих рефлексии. Примеры включают [... опущено намеренно ...] Если у вас есть какие-либо сомнения относительно того, попадает ли ваше приложение в одну из этих категорий, вероятно, нет.