— Привет, Амиго!
А теперь самое интересное. Мы познакомимся с классом Class и немного с Reflection.
Как ты уже, наверное, успел понять, в Java все является объектом. А что нужно для объекта? Что есть у каждого объекта и определяет саму его суть?
— Класс объекта!
— Правильно! Молодец. У каждого объекта есть класс. Но вернемся к объектам. Некоторые объекты полностью содержат какую-то сущность, другие же просто помогают ей управлять.
Ко вторым можно отнести FileOutputStream или Thread. Когда ты создаешь объект Thread, новая нить не создается. Ее создает Java-машина после вызова метода start(). Этот объект просто помогает управлять процессом.
Так же и FileOutputStream: файл хранится на диске и его хранением и доступом к нему управляет ОС. Но мы можем взаимодействовать с ним посредством объектов типа File, при опять-таки помощи Java-машины.
— Да, я это понял уже.
— Так вот, для взаимодействия с классами есть специальный класс и называется он — Class.
— Не трудно было догадаться.
— Ага. Каждый раз, когда Java-машина загружает в память новый класс, она создает объект типа Class, посредством которого можно получить некоторую информацию о загруженном классе.
К каждому классу и объекту привязан такой «объект класса».
Пример | Описание |
---|---|
|
Получение «объект класса» у класса Integer. |
|
Получение «объект класса» у класса int. |
|
Получение «объект класса» у объекта типа String. |
|
Получение «объект класса» у объекта типа Object. |
— Ух ты, как интересно.
А почему ты пишешь clazz, а не class?
— А ты помнишь, что слово class – это ключевое слово в Java и использовать его для именования переменных нельзя?
— Да, я это знаю, знаю. Только забыл.
— Ты где-нибудь уже использовал объект Class?
— Да, мы использовали его, когда писали свою реализацию метода equals.
— Да, можно сравнить – одинаковые ли у объектов классы, если воспользоваться методом getClass().
— А что можно делать с этим объектом?
— Ну, много чего:
Код на Java | Описание |
---|---|
|
Получить имя класса. |
|
Получить класс по имени. |
|
Сравнить классы у объектов. |
— Интересно, но не так круто, как я думал.
— Хочешь, чтобы было круто? Есть еще Reflection. Reflection – это очень круто.
— А что такое Reflection?
— Reflection – это способность класса получить информацию о самом себе. В Java есть специальные классы: Field – поле, Method – метод, по аналогии с Class для классов. Т.к. объект типа Class дает возможность получить информацию о классе, то объект типа Field–получить информацию о «поле класса», а Method–о «методе класса». И вот что с ними можно делать:
Код на Java | Описание |
---|---|
|
Получаем список «объектов класса» для интерфейсов класса List |
|
Получаем «объект класса» родительского класса для класса String |
|
Получаем список методов, которые есть у класса List |
|
Создаем новый объект класса String |
|
Получаем метод length у класса String, вызываем его у строки s |
— Вау! Вот это реально круто!
— Рад, что тебе понравилось.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ