Немає мовної підтримки, щоб робити те, про що ви просите.
Ви можете відображати доступ до членів типу під час виконання, використовуючи відображення (наприклад, 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, пункт 53: Віддайте перевагу інтерфейсам, ніж відображенню
Ось уривки з книги:
Отримавши Class
об’єкт, ви можете отримати Constructor
, Method
та Field
екземпляри, що представляють конструктори, методи та поля класу. [Вони] дозволяють вам рефлексивно маніпулювати їхніми аналогами . Однак ця сила має свою ціну:
- Ви втрачаєте всі переваги перевірки під час компіляції.
- Код, необхідний для здійснення світловідбиваючого доступу, незграбний і багатослівний.
- Продуктивність страждає.
Як правило, об'єкти не повинні отримувати відображувальний доступ у звичайних додатках під час виконання.
Є кілька складних додатків, які потребують роздумів. Приклади включають [... спеціально опущено ...]. Якщо у вас є якісь сумніви щодо того, чи потрапляє ваша заявка до однієї з цих категорій, можливо, це не так.