Что означает .class
в, например, MyClass.class
? Я понимаю, что когда вы добавляете имя класса и точки, он используется для доступа к его статическим полям или методам, но это не относится к ".class"
Что означает класс для класса после имени класса
Ответ 1
SomeClass.class
получает тип Class<SomeClass>
, который вы можете использовать для программирования с помощью API отражения.
Вы можете получить тот же тип, если у вас есть экземпляр класса с помощью instance.getClass()
.
Здесь вы можете посмотреть здесь. Например, вы можете:
- получить имена полей и методов, аннотаций и т.д.
- вызывать методы, получить конструктор для создания новых экземпляров класса
- получить имя класса, суперкласс, пакет и т.д.
Ответ 2
Когда вы пишете .class
после имени класса, он ссылается на объект Class
, который представляет данный класс (формально он именованный класс литерала). Тип NombreClase.class
равен Class<NombreClase>
.
Например, NombreClase.class
- это объект, который представляет класс NombreClase
во время выполнения. Это тот же объект, который возвращается методом getClass()
любого (прямого) экземпляра NombreClase
.
NombreClase obj = new NombreClase();
System.out.println(NombreClase.class.getName());
System.out.println(obj.getClass().getName())
Ответ 3
Вы можете добавить .class
к имени любого класса для извлечения экземпляра его объекта класса.
Когда вы используете Integer.class
, вы ссылаетесь на экземпляр Class<Integer>
, который является типизированным объектом класса.
Я всегда думал, что это член поля, который был добавлен компилятором, но похоже, что это действительно просто синтаксический сахар.