Для каждого неуниверсального (или необработанного) типа (Класс, интерфейс, тип массива, тип примитива) существует объект Class, созданный при загрузке этого класса.Этот объект не является полностью неизменным, так как он содержит статические переменные класса, например.
Если у вас есть объект, вы можете получить объект класса его реализующего класса, вызвав o.getClass()
.Если у вас есть какой-то тип, вы можете получить его объект класса с помощью T.class
в Java.
Из объекта класса вы можете проверить свой класс, получить конструкторы, методы, поля, суперкласс, реализованные интерфейсы и т.on - это называется отражением.
(подробности см. по ссылкам в других ответах.)