Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpRfInr 125 of 322 menu
◀ ▶

Введение в рефлексию в Java

Иногда код должен спросить у уже описанного типа, как он называется и из чего состоит, ещё до работы с конкретным экземпляром. На JVM такие сведения лежат в собранном class-файле; в Java к ним обращаются через пакет java.lang.reflect и тип Class.

Рефлексия - способ читать эти метаданные из работающей программы: перечислить поля, найти метод, вызвать конструктор или прочитать пометку на классе.

У каждого типа есть литерал ИмяТипа.class. Выражение не создаёт объект - оно возвращает описание класса, с которым дальше работают как с обычным значением:

class Parcel { private final int id; Parcel(int id) { this.id = id; } } public class Main { public static void main(String[] args) { Class<?> kind = Parcel.class; System.out.println(kind); } }

Печать такого значения даёт служебную строку с полным именем на JVM. Для человека удобнее метод getSimpleName - короткое имя без пакета:

class Parcel { private final int id; Parcel(int id) { this.id = id; } } public class Main { public static void main(String[] args) { Class<?> kind = Parcel.class; System.out.println(kind.getSimpleName()); } }

Тот же приём работает и для встроенных типов: достаточно написать String.class или int.class в любом месте программы. Так проверяют, с каким классом столкнулся код, не завязываясь на конкретный экземпляр.

Одной ссылки на класс хватает, чтобы понять идею темы: программа читает описание типа изнутри, ещё до работы с объектом в памяти. В следующих уроках разберём другие способы получить Class, списки членов класса, создание объектов и вызовы по ссылке.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить