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