Что означает класс для класса после имени класса

Что означает .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>, который является типизированным объектом класса.

Я всегда думал, что это член поля, который был добавлен компилятором, но похоже, что это действительно просто синтаксический сахар.