Spec-Zone.ru › OpenJDK 24

Класс Class

java.lang.Object
java.lang.Class
Type Parameters:
T - тип класса, моделируемого этим Class объектом. Например, тип String.class равен Class<String>. Используйте Class<?>, если моделируемый класс неизвестен.
Все реализуемые интерфейсы:
Serializable, Constable, TypeDescriptor, TypeDescriptor.OfField<Class<?>>, AnnotatedElement, GenericDeclaration, Type
public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement, TypeDescriptor.OfField<Class<?>>, Constable
Экземпляры класса Class представляют классы и интерфейсы в работающей Java-приложении. Класс перечисления и класс записи являются видами классов; аннотационный интерфейс является видом интерфейса. Каждый массив также принадлежит классу, который отражается как объект Class, который используется всеми массивами с одинаковым типом элементов и количеством измерений. Примитивные типы Java (boolean, byte, char, short, int, long, float и double), и ключевое слово void также представлены как объекты Class.

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

  • ClassLoader::defineClass
  • java.lang.invoke.MethodHandles.Lookup::defineClass
  • java.lang.invoke.MethodHandles.Lookup::defineHiddenClass

Методы класса Class раскрывают множество характеристик класса или интерфейса. Большинство характеристик получено из файла class, переданного загрузчиком классов Java-виртуальной машине, или из файла class, переданного Lookup::defineClass или Lookup::defineHiddenClass. Некоторые характеристики определяются средой загрузки классов во время выполнения, например, модуль, возвращаемый getModule().

Следующий пример использует объект Class для вывода имени класса объекта:

void printClassName(Object obj) {
    System.out.println("The class of " + obj +
                       " is " + obj.getClass().getName());
}
Также можно получить объект Class для именованного класса или интерфейса (или для void) с помощью литерала класса (JLS 15.8.2). Например:
System.out.println("The name of class Foo is: " + Foo.class.getName());

Некоторые методы класса Class показывают, была ли декларация класса или интерфейса в исходном коде Java вложена в другую декларацию. Другие методы описывают, как класс или интерфейс расположен в гнезде. Гнездо — это набор классов и интерфейсов в одном пакете времени выполнения, которые позволяют взаимный доступ к их private членам. Классы и интерфейсы известны как соседи по гнезду (JVMS 4.7.29). Один сосед по гнезду выступает в качестве хозяина гнезда (JVMS 4.7.28) и перечисляет других соседей по гнезду, которые принадлежат к гнезду; каждый из них в свою очередь записывает его как хозяина гнезда. Классы и интерфейсы, которые принадлежат к гнезду, включая его хозяина, определяются при генерации файлов class, например, компилятор Java обычно записывает класс верхнего уровня как хозяина гнезда, где другие члены — это классы и интерфейсы, чьи декларации заключены внутри декларации класса верхнего уровня.

Скрытые классы

Класс или интерфейс, созданный вызовом Lookup::defineHiddenClass, является скрытым классом или интерфейсом. Все виды классов, включая классы перечислений и классы записей, могут быть скрытыми классами; все виды интерфейсов, включая аннотационные интерфейсы, могут быть скрытыми интерфейсами. Имя скрытого класса или интерфейса не является бинарным именем, что означает следующее:
  • К скрытому классу или интерфейсу нельзя обратиться по константным пулам других классов и интерфейсов.
  • Скрытый класс или интерфейс не может быть описан в номинальной форме с помощью Class::describeConstable, ClassDesc::of или ClassDesc::ofDescriptor.
  • Скрытый класс или интерфейс не может быть обнаружен с помощью Class::forName или ClassLoader::loadClass.
Скрытый класс или интерфейс никогда не является классом массива, но может быть типом элемента массива. Во всех других отношениях тот факт, что класс или интерфейс скрыт, не влияет на характеристики, раскрытые методами класса Class.

Неявные классы

Обычно компилятор Java, начиная с исходного файла для неявного класса, например, HelloWorld.java, создаёт аналогичный файл class, HelloWorld.class, где класс, хранящийся в этом файле class, имеет имя "HelloWorld", совпадающее с базовыми именами исходного и файлов class. Для объекта Class неявного класса HelloWorld методы получения имени и имени типа возвращают результаты, равные "HelloWorld". Простое имя такого неявного класса — "HelloWorld", а каноническое имя — "HelloWorld".
С:
1.0
См. также:
  • ClassLoader.defineClass(byte[], int, int)
  • Сериализованная форма

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в интерфейсе java.lang.invoke.TypeDescriptor

TypeDescriptor.OfField<F extends TypeDescriptor.OfField<F>>, TypeDescriptor.OfMethod<F extends TypeDescriptor.OfField<F>, M extends TypeDescriptor.OfMethod<F,M>>

Краткое описание методов

Модификатор и тип Метод Описание
Set<AccessFlag> accessFlags()
Возвращает неизменяемый набор флагов доступа для этого класса, возможно пустой.
Class<?> arrayType()
Возвращает Class для типа массива, тип компонента которого описан этим классом.
<U> Class<? extends U> asSubclass(Class<U> clazz)
Преобразует этот объект Class для представления подкласса класса, представленного указанным объектом класса.
T cast(Object obj)
Преобразует объект в класс или интерфейс, представленный этим объектом Class.
Class<?> componentType()
Возвращает тип компонента этого Class, если он описывает тип массива, или null в противном случае.
Optional<ClassDesc> describeConstable()
Возвращает номинальный дескриптор для этого экземпляра, если его можно создать, или пустой Optional, если его нельзя.
String descriptorString()
Возвращает строку-дескриптор сущности (класс, интерфейс, класс массива, примитивный тип или void), представленной этим объектом Class.
boolean desiredAssertionStatus()
Возвращает статус утверждения, который был бы назначен этому классу, если бы он был инициализирован в момент вызова этого метода.
static Class<?> forName(Module module, String name)
Возвращает Class с заданным бинарным именем в заданном модуле.
static Class<?> forName(String className)
Возвращает объект Class, связанный с классом или интерфейсом с заданным строковым именем.
static Class<?> forName(String name, boolean initialize, ClassLoader loader)
Возвращает объект Class, связанный с классом или интерфейсом с заданным строковым именем, используя заданный загрузчик классов.
static Class<?> forPrimitiveName(String primitiveName)
Возвращает объект Class, связанный с примитивным типом данного имени.
AnnotatedType[] getAnnotatedInterfaces()
Возвращает массив объектов AnnotatedType, которые представляют использование типов для указания суперинтерфейсов сущности, представленной этим объектом Class.
AnnotatedType getAnnotatedSuperclass()
Возвращает объект AnnotatedType, который представляет использование типа для указания суперкласса сущности, представленной этим объектом Class.
<A extends Annotation>
A
getAnnotation(Class<A> annotationClass)
Возвращает аннотацию этого элемента для указанного типа, если такая аннотация присутствует, иначе null.
Annotation[] getAnnotations()
Возвращает аннотации, которые присутствуют на этом элементе.
<A extends Annotation>
A[]
getAnnotationsByType(Class<A> annotationClass)
Возвращает аннотации, которые ассоциированы с этим элементом.
String getCanonicalName()
Возвращает каноническое имя базового класса, как определено в Спецификации языка Java.
Class<?>[] getClasses()
Возвращает массив объектов Class, представляющих все открытые классы и интерфейсы, которые являются членами класса, представленного этим объектом Class.
ClassLoader getClassLoader()
Возвращает загрузчик классов для класса.
Class<?> getComponentType()
Возвращает Class, представляющий тип компонента массива.
Constructor<T> getConstructor(Class<?>... parameterTypes)
Возвращает объект Constructor, который отражает указанный открытый конструктор класса, представленного этим объектом Class.
Constructor<?>[] getConstructors()
Возвращает массив объектов Constructor, отражающих все открытые конструкторы класса, представленного этим объектом Class.
<A extends Annotation>
A
getDeclaredAnnotation(Class<A> annotationClass)
Возвращает аннотацию этого элемента для указанного типа, если такая аннотация непосредственно присутствует, иначе null.
Annotation[] getDeclaredAnnotations()
Возвращает аннотации, которые непосредственно присутствуют на этом элементе.
<A extends Annotation>
A[]
getDeclaredAnnotationsByType(Class<A> annotationClass)
Возвращает аннотацию(и) этого элемента для указанного типа, если такие аннотации либо непосредственно присутствуют, либо косвенно присутствуют.
Class<?>[] getDeclaredClasses()
Возвращает массив объектов Class, отражающих все классы и интерфейсы, объявленные в качестве членов класса, представленного этим объектом Class.
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
Возвращает объект Constructor, который отражает указанный конструктор класса, представленного этим объектом Class.
Constructor<?>[] getDeclaredConstructors()
Возвращает массив объектов Constructor, отражающих все конструкторы, явным или неявным образом объявленные классом, представленным этим объектом Class.
Field getDeclaredField(String name)
Возвращает объект Field, который отражает указанное объявленное поле класса или интерфейса, представленного этим объектом Class.
Field[] getDeclaredFields()
Возвращает массив объектов Field, отражающих все объявленные поля класса или интерфейса, представленного этим объектом Class.
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
Возвращает объект Method, который отражает указанный объявленный метод класса или интерфейса, представленного этим объектом Class.
Method[] getDeclaredMethods()
Возвращает массив содержащий объекты Method, отражающие все объявленные методы класса или интерфейса, представленного этим объектом Class, включая public, protected, default (package) доступ, и private методы, но исключая унаследованные методы.
Class<?> getDeclaringClass()
Если класс или интерфейс, представленный этим объектом Class, является членом другого класса, возвращает объект Class, представляющий класс, в котором он был объявлен.
Class<?> getEnclosingClass()
Возвращает непосредственно окружающий класс базового класса.
Constructor<?> getEnclosingConstructor()
Если этот объект Class представляет локальный или анонимный класс внутри конструктора, возвращает объект Constructor, представляющий непосредственно окружающий конструктор базового класса.
Method getEnclosingMethod()
Если этот объект Class представляет локальный или анонимный класс внутри метода, возвращает объект Method, представляющий непосредственно окружающий метод базового класса.
T[] getEnumConstants()
Возвращает элементы этого перечисления или null, если этот объект класса Class не представляет класс перечисления.
Field getField(String name)
Возвращает объект Field, который отражает указанное открытое поле-член класса или интерфейса, представленного этим объектом Class.
Field[] getFields()
Возвращает массив объектов Field, отражающих все доступные открытые поля класса или интерфейса, представленного этим объектом Class.
Type[] getGenericInterfaces()
Возвращает Type, представляющие интерфейсы, непосредственно реализованные классом или интерфейсом, представленным этим объектом Class.
Type getGenericSuperclass()
Возвращает Type, представляющий непосредственный суперкласс сущности (класс, интерфейс, примитивный тип или void), представленной этим объектом Class.
Class<?>[] getInterfaces()
Возвращает интерфейсы, непосредственно реализуемые классом или интерфейсом, представленным этим объектом Class.
Method getMethod(String name, Class<?>... parameterTypes)
Возвращает объект Method, отражающий указанный публичный метод-член класса или интерфейса, представленный этим объектом Class.
Method[] getMethods()
Возвращает массив объектов Method, отражающих все публичные методы класса или интерфейса, представленного этим объектом Class, включая те, которые объявлены классом или интерфейсом, и те, которые унаследованы от суперклассов и суперинтерфейсов.
int getModifiers()
Возвращает модификаторы языка Java для этого класса или интерфейса, закодированные в целое число.
Module getModule()
Возвращает модуль, членом которого является этот класс или интерфейс.
String getName()
Возвращает имя сущности (класс, интерфейс, массив, примитивный тип или void), представленной этим объектом Class.
Class<?> getNestHost()
Возвращает хост вложенности (вложенность), к которой принадлежит класс или интерфейс, представленный этим объектом Class.
Class<?>[] getNestMembers()
Возвращает массив объектов Class, представляющих все классы и интерфейсы, которые являются членами вложенности, к которой принадлежит класс или интерфейс, представленный этим объектом Class.
Package getPackage()
Получает пакет этого класса.
String getPackageName()
Возвращает полное имя пакета.
Class<?>[] getPermittedSubclasses()
Возвращает массив объектов Class, представляющих непосредственные подинтерфейсы или подклассы, разрешенные для расширения или реализации этого класса или интерфейса, если он запечатан.
ProtectionDomain getProtectionDomain()
Возвращает ProtectionDomain этого класса.
RecordComponent[] getRecordComponents()
Возвращает массив объектов RecordComponent, представляющих все компоненты записи этого класса записи, или null, если этот класс не является классом записи.
URL getResource(String name)
Находит ресурс с заданным именем.
InputStream getResourceAsStream(String name)
Находит ресурс с заданным именем.
Object[] getSigners()
Получает подписи этого класса.
String getSimpleName()
Возвращает простое имя базового класса, как указано в исходном коде.
Class<? super T> getSuperclass()
Возвращает Class, представляющий непосредственный суперкласс сущности (класс, интерфейс, примитивный тип или void), представленной этим объектом Class.
String getTypeName()
Возвращает информативную строку для имени этого класса или интерфейса.
TypeVariable<Class<T>>[] getTypeParameters()
Возвращает массив объектов TypeVariable, представляющих переменные типа, объявленные обобщённым объявлением, представленным этим объектом GenericDeclaration, в порядке объявления.
boolean isAnnotation()
Возвращает true, если этот объект Class представляет собой интерфейс аннотаций.
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
Возвращает true, если аннотация для указанного типа присутствует на этом элементе, в противном случае false.
boolean isAnonymousClass()
Возвращает true тогда и только тогда, когда базовый класс является анонимным классом.
boolean isArray()
Определяет, представляет ли этот объект Class класс массива.
boolean isAssignableFrom(Class<?> cls)
Определяет, является ли класс или интерфейс, представленный этим объектом Class, таким же, или является суперклассом или суперинтерфейсом класса или интерфейса, представленного указанным параметром Class.
boolean isEnum()
Возвращает true, тогда и только тогда, когда этот класс был объявлен как перечисление в исходном коде.
boolean isHidden()
Возвращает true тогда и только тогда, когда базовый класс является скрытым классом.
boolean isInstance(Object obj)
Определяет, является ли указанный Object совместимым для присваивания с объектом, представленным этим объектом Class.
boolean isInterface()
Определяет, представляет ли этот объект Class тип интерфейса.
boolean isLocalClass()
Возвращает true тогда и только тогда, когда базовый класс является локальным классом.
boolean isMemberClass()
Возвращает true тогда и только тогда, когда базовый класс является вложенным классом.
boolean isNestmateOf(Class<?> c)
Определяет, является ли данный Class сотоварищем по вложенности класса или интерфейса, представленного этим объектом Class.
boolean isPrimitive()
Определяет, представляет ли этот объект Class примитивный тип или void.
boolean isRecord()
Возвращает true, тогда и только тогда, когда этот класс является классом записи.
boolean isSealed()
Возвращает true, тогда и только тогда, когда этот объект Class представляет собой запечатанный класс или интерфейс.
boolean isSynthetic()
Возвращает true тогда и только тогда, когда у этого класса установлен бит синтетического модификатора.
T newInstance()
Устарело.
Этот метод передает любое исключение, брошенное нулевым конструктором, включая проверенное исключение.
String toGenericString()
Возвращает строку, описывающую этот объект Class, включая информацию о модификаторах, статусе sealed/ non-sealed и параметрах типа.
String toString()
Преобразует объект в строку.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание методов

toString

public String toString()
Преобразует объект в строку. Строковое представление — это строка "class" или "interface", за которой следует пробел и имя класса в формате, возвращаемом getName. Если этот Class объект представляет примитивный тип, этот метод возвращает имя примитивного типа. Если этот Class объект представляет void, этот метод возвращает "void". Если этот Class объект представляет тип массива, этот метод возвращает "class ", за которым следует getName.
Overrides:
toString в классе Object
Возвращает:
строковое представление этого Class объекта.

toGenericString

public String toGenericString()
Возвращает строку, описывающую этот Class, включая информацию о модификаторах, статусе sealed/ non-sealed и параметрах типа. Строка отформатирована как список модификаторов типа, если таковые имеются, за которыми следует тип (пустая строка для примитивных типов и class, enum, interface, @interface или record, соответственно), за которым следует имя типа, за которым следует список параметров типа в квадратных скобках, разделенных запятыми, если таковые имеются, включая информативные границы для параметров типа, если таковые имеются. Для разделения модификаторов друг от друга и от типа используется пробел. Модификаторы упорядочены в каноническом порядке. Если параметров типа нет, список параметров типа опускается. Для типа массива строка начинается с имени типа, за которым следует список параметров типа в квадратных скобках, разделенных запятыми, если таковые имеются, за которым следует последовательность [] символов, одна пара скобок на каждую размерность массива.

Обратите внимание, что поскольку генерируется информация о представлении типа во время выполнения, могут присутствовать модификаторы, отсутствующие в исходном коде или недопустимые в исходном коде.

Возвращает:
строку, описывающую этот Class, включая информацию о модификаторах и параметрах типа
С:
1.8

forName

public static Class<?> forName(String className) throws ClassNotFoundException
Возвращает объект Class, связанный с классом или интерфейсом с данным именем строки. Вызов этого метода эквивалентен:
Class.forName(className, true, currentLoader)
где currentLoader обозначает определяющий загрузчик классов текущего класса.

Например, следующий фрагмент кода возвращает объект Class во время выполнения для класса с именем java.lang.Thread:

Class<?> t = Class.forName("java.lang.Thread");

Вызов forName("X") вызывает инициализацию класса с именем X.

В случаях, когда этот метод вызывается из контекста, в котором нет кадра вызова в стеке (например, при вызове напрямую из нити, прикрепленной к JNI), используется системный загрузчик классов.

Параметры:
className - бинарное имя класса или интерфейса или строка, представляющая тип массива
Возвращает:
объект Class для класса с заданным именем.
Исключения:
LinkageError - если произошла ошибка при связывании
ExceptionInInitializerError - если инициализация, вызванная этим методом, завершилась неудачно
ClassNotFoundException - если класс не найден
См. Спецификацию языка Java:
12.2 Загрузка классов и интерфейсов
12.3 Связывание классов и интерфейсов
12.4 Инициализация классов и интерфейсов

forName

public static Class<?> forName(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException
Возвращает объект Class, связанный с классом или интерфейсом с заданным строковым именем, используя указанный загрузчик классов. Учитывая бинарное имя класса или интерфейса, этот метод пытается найти и загрузить класс или интерфейс. Для загрузки класса или интерфейса используется указанный загрузчик классов. Если параметр loader равен null, класс загружается через загрузчик Bootstrap. Класс инициализируется только в том случае, если параметр initialize равен true и если он не был инициализирован ранее.

Этот метод не может использоваться для получения любого из объектов Class, представляющих примитивные типы или void, скрытых классов или интерфейсов, или классов массивов, тип элементов которых является скрытым классом или интерфейсом. Если name обозначает примитивный тип или void, например I, будет предпринята попытка найти определяемый пользователем класс в безымянном пакете с именем I вместо этого. Для получения объекта Class для именованного примитивного типа, например, int или long, используйте forPrimitiveName(String).

Для получения объекта Class, связанного с классом массива, имя состоит из одного или нескольких '[', представляющих глубину вложения массива, за которым следует тип элемента, как закодировано в таблице, указанной в Class.getName().

Примеры:

Class<?> threadClass = Class.forName("java.lang.Thread", false, currentLoader);
Class<?> stringArrayClass = Class.forName("[Ljava.lang.String;", false, currentLoader);
Class<?> intArrayClass = Class.forName("[[[I", false, currentLoader);   // Class of int[][][]
Class<?> nestedClass = Class.forName("java.lang.Character$UnicodeBlock", false, currentLoader);
Class<?> fooClass = Class.forName("Foo", true, currentLoader);

Вызов getName() на объекте Class, возвращенном из forName(N), возвращает N.

Вызов forName("[LN;") вызывает загрузку типа элемента с именем N, но не инициализирует его независимо от значения параметра initialize.

Примечание API:
Этот метод генерирует ошибки, связанные с загрузкой, связыванием или инициализацией, как указано в разделах 12.2, 12.3 и 12.4 Спецификации языка Java. Кроме того, этот метод не проверяет, доступен ли запрашиваемый класс вызывающему методу.
Параметры:
name - бинарное имя класса или строка, представляющая класс массива
initialize - если true, класс будет инициализирован (что подразумевает связывание). См. раздел 12.4 Спецификации языка Java.
loader - загрузчик классов, из которого должен загружаться класс
Возвращает:
объект класса, представляющий нужный класс
Исключения:
LinkageError - если произошла ошибка при связывании
ExceptionInInitializerError - если инициализация, вызванная этим методом, завершилась неудачно
ClassNotFoundException - если класс не может быть найден указанным загрузчиком классов
См. Спецификацию языка Java:
12.2 Загрузка классов и интерфейсов
12.3 Связывание классов и интерфейсов
12.4 Инициализация классов и интерфейсов
13.1 Формат двоичного файла
С:
1.2
См. также:
  • forName(String)
  • ClassLoader

forName

public static Class<?> forName(Module module, String name)
Возвращает Class с заданным бинарным именем в заданном модуле.

Этот метод пытается найти и загрузить класс или интерфейс. Он не связывает класс и не выполняет инициализатор класса. Если класс не найден, этот метод возвращает null.

Если загрузчик классов заданного модуля определяет другие модули и заданное имя — это класс, определенный в другом модуле, этот метод возвращает null после загрузки класса.

Этот метод не проверяет, доступен ли запрашиваемый класс вызывающему методу.

Примечание API:
Этот метод не поддерживает загрузку типов массивов, в отличие от forName(String, boolean, ClassLoader). Имя класса должно быть бинарным именем. Этот метод возвращает null при неудаче вместо того, чтобы генерировать ClassNotFoundException, как это делает метод forName(String, boolean, ClassLoader).
Параметры:
module - Модуль
name - бинарное имя класса
Возвращает:
объект Class заданного имени, определенного в заданном модуле; null, если не найден.
Исключения:
NullPointerException - если заданный модуль или имя являются null
LinkageError - если произошла ошибка при связывании
См. Спецификацию языка Java:
12.2 Загрузка классов и интерфейсов
12.3 Связывание классов и интерфейсов
С:
9

forPrimitiveName

public static Class<?> forPrimitiveName(String primitiveName)
Возвращает объект Class, связанный с примитивным типом заданного имени. Если аргумент не является именем примитивного типа, возвращается null.
Parameters:
primitiveName - имя примитивного типа для поиска
Returns:
объект Class, связанный с примитивным типом заданного имени
Throws:
NullPointerException - если аргумент является null
См. Спецификацию языка Java:
4.2 Примитивные типы и значения
15.8.2 Литералы классов
Since:
22

newInstance

@Deprecated(since="9") public T newInstance() throws InstantiationException, IllegalAccessException
Устаревший.
Этот метод распространяет любое исключение, брошенное конструктором без аргументов, включая исключение с проверкой. Использование этого метода фактически обходит проверку исключений во время компиляции, которая в противном случае выполнялась бы компилятором. Метод Constructor.newInstance избегает этой проблемы, обертывая любое исключение, брошенное конструктором, в (проверяемое) InvocationTargetException.

Вызов

clazz.newInstance()
можно заменить на
clazz.getDeclaredConstructor().newInstance()
Последняя последовательность вызовов предполагается способной бросить дополнительные типы исключений InvocationTargetException и NoSuchMethodException. Оба этих типа исключений являются подклассами ReflectiveOperationException.
Создает новый экземпляр класса, представленного этим объектом Class. Класс создаётся так, как если бы он был выражением new с пустым списком аргументов. Класс инициализируется, если он ещё не был инициализирован.
Returns:
новый экземпляр класса, представленного этим объектом.
Throws:
IllegalAccessException - если класс или его конструктор без аргументов недоступен.
InstantiationException - если этот объект Class представляет абстрактный класс, интерфейс, класс массива, примитивный тип или void; или если у класса нет конструктора без аргументов; или если создание экземпляра терпит неудачу по какой-либо другой причине.
ExceptionInInitializerError - если инициализация, вызванная этим методом, завершится неудачей.

isInstance

public boolean isInstance(Object obj)
Определяет, является ли указанный Object совместимым по присваиванию с объектом, представленным этим объектом Class. Этот метод является динамическим эквивалентом оператора языка Java instanceof. Метод возвращает true, если указанный Object аргумент не равен null и может быть преобразован к типу ссылки, представленному этим объектом Class, без повышения исключения ClassCastException.. В противном случае возвращается false.

В частности, если этот объект Class представляет объявленный класс, этот метод возвращает true, если указанный аргумент Object является экземпляром представленного класса (или любого его подкласса); в противном случае возвращается false. Если этот объект Class представляет класс массива, этот метод возвращает true, если указанный аргумент Object может быть преобразован в объект класса массива с помощью преобразования тождества или расширяющего преобразования ссылки; в противном случае возвращается false. Если этот объект Class представляет интерфейс, этот метод возвращает true, если класс или любой его суперкласс указанного аргумента Object реализует этот интерфейс; в противном случае возвращается false. Если этот объект Class представляет примитивный тип, этот метод возвращает false.

Parameters:
obj - объект для проверки
Returns:
true, если obj является экземпляром этого класса
Since:
1.1

isAssignableFrom

public boolean isAssignableFrom(Class<?> cls)
Определяет, является ли класс или интерфейс, представленный этим объектом Class, таким же, как или является суперклассом или суперинтерфейсом класса или интерфейса, представленного указанным параметром Class. Если это так, возвращается true; в противном случае возвращается false. Если этот объект Class представляет примитивный тип, этот метод возвращает true, если указанный параметр Class точно соответствует этому объекту Class; в противном случае возвращается false.

Этот метод проверяет, может ли тип, представленный указанным параметром Class, быть преобразован в тип, представленный этим объектом Class, посредством преобразования тождества или расширяющего преобразования ссылки. См. Спецификацию языка Java, разделы 5.1.1 и 5.1.4, для получения подробной информации.

Parameters:
cls - проверяемый объект Class
Returns:
значение boolean, указывающее, могут ли объекты типа cls быть присвоены объектам этого класса
Throws:
NullPointerException - если указанный параметр Class равен null.
Since:
1.1

isInterface

public boolean isInterface()
Определяет, представляет ли этот объект Class тип интерфейса.
Returns:
true, если этот объект Class представляет интерфейс; false в противном случае.

isArray

public boolean isArray()
Определяет, представляет ли этот объект Class класс массива.
Specified by:
isArray в интерфейсе TypeDescriptor.OfField<T>
Returns:
true, если этот объект Class представляет класс массива; false в противном случае.
Since:
1.1

isPrimitive

public boolean isPrimitive()
Определяет, представляет ли этот объект Class примитивный тип или void.

Существует девять предопределенных объектов Class, представляющих восемь примитивных типов и void. Они создаются виртуальной машиной Java и имеют те же имена, что и представляемые ими примитивные типы, а именно boolean, byte, char, short, int, long, float и double.

Никакие другие объекты класса не считаются примитивными.

Specified by:
isPrimitive в интерфейсе TypeDescriptor.OfField<T>
API Note:
Объект Class, представляющий примитивный тип, можно получить через общедоступные статические конечные переменные TYPE, определенные в классах-обёртках примитивных типов, таких как Integer.TYPE. В языке программирования Java, на эти объекты можно ссылаться через выражения с литералами классов, такие как int.class. Объект Class для void можно выразить как void.class или Void.TYPE.
Returns:
true тогда и только тогда, когда этот класс представляет примитивный тип
См. Спецификацию языка Java:
15.8.2 Литералы классов
Since:
1.1
См. также:
  • Boolean.TYPE
  • Character.TYPE
  • Byte.TYPE
  • Short.TYPE
  • Integer.TYPE
  • Long.TYPE
  • Float.TYPE
  • Double.TYPE
  • Void.TYPE

isAnnotation

public boolean isAnnotation()
Возвращает true, если этот объект Class представляет интерфейс аннотации. Обратите внимание, что если этот метод возвращает true, isInterface() также вернёт true, так как все интерфейсы аннотаций также являются интерфейсами.
Returns:
true, если этот объект Class представляет интерфейс аннотации; false в противном случае
Since:
1.5

isSynthetic

public boolean isSynthetic()
Возвращает true тогда и только тогда, когда у этого класса установлен бит модификатора synthetic.
Returns:
true тогда и только тогда, когда у этого класса установлен бит модификатора synthetic
See Java Language Specification:
13.1 Формат двоичного
See Java Virtual Machine Specification:
4.1 Структура ClassFile
Since:
1.5
See Also:
  • Моделирование языка программирования Java и JVM в ядре отражения

getName

public String getName()
Возвращает имя сущности (класс, интерфейс, класс массива, примитивный тип или void), представленной этим объектом Class.

Если этот объект Class представляет класс или интерфейс, а не класс массива, то:

  • Если класс или интерфейс не скрыт, то возвращается бинарное имя класса или интерфейса.
  • Если класс или интерфейс скрыт, то результатом является строка вида: N + '/' + <suffix>, где N — бинарное имя, указанное в файле class, переданном в Lookup::defineHiddenClass, а <suffix> — неопределённое имя.

Если этот объект Class представляет класс массива, то результатом является строка, состоящая из одной или нескольких символов '[', представляющих глубину вложенности массива, за которой следует тип элемента, закодированный с использованием следующей таблицы:

Типы элементов и кодировки
Тип элемента Кодировка
boolean Z
byte B
char C
класс или интерфейс с бинарным именем N LN;
double D
float F
int I
long J
short S

Если этот объект Class представляет примитивный тип или void, то результатом является строка с тем же написанием, что и ключевое слово языка Java, соответствующее примитивному типу или void.

Примеры:

 String.class.getName()
     returns "java.lang.String"
 Character.UnicodeBlock.class.getName()
     returns "java.lang.Character$UnicodeBlock"
 byte.class.getName()
     returns "byte"
 (new Object[3]).getClass().getName()
     returns "[Ljava.lang.Object;"
 (new int[3][4][5][6][7][8][9]).getClass().getName()
     returns "[[[[[[[I"
 
API Note:
Разные объекты класса могут иметь одинаковое имя, но разные загрузчики классов.
Returns:
имя класса, интерфейса или другой сущности, представленной этим объектом Class.
See Java Language Specification:
13.1 Формат двоичного

getClassLoader

public ClassLoader getClassLoader()
Возвращает загрузчик классов для класса. Некоторые реализации могут использовать null для представления загрузчика Bootstrap-классов. Этот метод вернет null в таких реализациях, если этот класс был загружен загрузчиком Bootstrap-классов.

Если этот объект Class представляет примитивный тип или void, возвращается null.

Returns:
загрузчик классов, который загрузил класс или интерфейс, представленный этим объектом Class.
See Also:
  • ClassLoader

getModule

public Module getModule()
Возвращает модуль, к которому принадлежит этот класс или интерфейс. Если этот класс представляет тип массива, то метод возвращает модуль для типа элемента. Если этот класс представляет примитивный тип или void, то возвращается объект Module для модуля java.base. Если этот класс находится в безымянном модуле, то возвращается безымянный Module загрузчика классов для этого класса.
Returns:
модуль, к которому принадлежит этот класс или интерфейс
Since:
9

getTypeParameters

public TypeVariable<Class<T>>[] getTypeParameters()
Возвращает массив объектов TypeVariable, которые представляют переменные типов, объявленные обобщённым объявлением, представленным этим объектом GenericDeclaration, в порядке объявления. Возвращает массив длиной 0, если базовое обобщённое объявление не объявляет никаких переменных типов.
Specified by:
getTypeParameters в интерфейсе GenericDeclaration
Returns:
массив объектов TypeVariable, которые представляют переменные типов, объявленные этим обобщённым объявлением
Throws:
GenericSignatureFormatError - если обобщённая подпись этого обобщённого объявления не соответствует формату, указанному в разделе 4.7.9 спецификации Java Virtual Machine
Since:
1.5

getSuperclass

public Class<? super T> getSuperclass()
Возвращает объект Class, представляющий непосредственный суперкласс сущности (класс, интерфейс, примитивный тип или void), представленной этим объектом Class. Если этот объект Class представляет класс Object, интерфейс, примитивный тип или void, то возвращается null. Если этот объект Class представляет класс массива, то возвращается объект Class, представляющий класс Object.
Returns:
непосредственный суперкласс класса, представленного этим объектом Class

getGenericSuperclass

public Type getGenericSuperclass()
Возвращает объект Type, представляющий непосредственный суперкласс сущности (класс, интерфейс, примитивный тип или void), представленной этим объектом Class.

Если суперкласс является параметризованным типом, объект Type, возвращаемый методом, должен точно отражать фактические аргументы типа, используемые в исходном коде. Параметризованный тип, представляющий суперкласс, создаётся, если он ещё не был создан. См. объявление интерфейса ParameterizedType для семантики процесса создания параметризованных типов. Если этот объект Class представляет класс Object, интерфейс, примитивный тип или void, то возвращается null. Если этот объект Class представляет класс массива, то возвращается объект Class, представляющий класс Object.

Returns:
непосредственный суперкласс класса, представленного этим объектом Class
Throws:
GenericSignatureFormatError - если обобщённая подпись класса не соответствует формату, указанному в разделе 4.7.9 спецификации Java Virtual Machine
TypeNotPresentException - если обобщённый суперкласс ссылается на не существующее объявление типа
MalformedParameterizedTypeException - если обобщённый суперкласс ссылается на параметризованный тип, который нельзя создать по каким-либо причинам
Since:
1.5

getPackage

public Package getPackage()
Получает пакет этого класса.

Если этот класс представляет тип массива, примитивный тип или void, этот метод возвращает null.

Returns:
пакет этого класса.

getPackageName

public String getPackageName()
Возвращает полное имя пакета.

Если этот класс является верхнеуровневым классом, то этот метод возвращает полное имя пакета, к которому принадлежит класс, или пустую строку, если класс находится в безымянном пакете.

Если этот класс является вложенным классом, то этот метод эквивалентен вызову getPackageName() для внешнего класса.

Если этот класс является локальным классом local class или анонимным классом anonymous class, то этот метод эквивалентен вызову getPackageName() для объявляющего класса внешнего метода или внешнего конструктора.

Если этот класс представляет тип массива, то этот метод возвращает имя пакета типа элемента. Если этот класс представляет примитивный тип или void, то возвращается имя пакета "java.lang".

Returns:
полное имя пакета
See Java Language Specification:
6.7 Полные имена и канонические имена
Since:
9

getInterfaces

public Class<?>[] getInterfaces()
Возвращает интерфейсы, напрямую реализуемые классом или интерфейсом, представленным этим Class объектом.

Если этот Class объект представляет класс, возвращаемое значение — массив, содержащий объекты, представляющие все интерфейсы, напрямую реализуемые классом. Порядок интерфейсных объектов в массиве соответствует порядку имён интерфейсов в implements части объявления класса, представленного этим Class объектом. Например, при объявлении:

class Shimmer implements FloorWax, DessertTopping { ... }
предположим, что значение s является экземпляром Shimmer; значение выражения:
s.getClass().getInterfaces()[0]
является Class объектом, представляющим интерфейс FloorWax; а значение:
s.getClass().getInterfaces()[1]
является Class объектом, представляющим интерфейс DessertTopping.

Если этот Class объект представляет интерфейс, массив содержит объекты, представляющие все интерфейсы, напрямую расширяемые этим интерфейсом. Порядок интерфейсных объектов в массиве соответствует порядку имён интерфейсов в extends части объявления интерфейса, представленного этим Class объектом.

Если этот Class объект представляет класс или интерфейс, не реализующий никаких интерфейсов, метод возвращает массив длины 0.

Если этот Class объект представляет примитивный тип или void, метод возвращает массив длины 0.

Если этот Class объект представляет тип массива, возвращаются интерфейсы Cloneable и java.io.Serializable в указанном порядке.

Возвращает:
массив интерфейсов, напрямую реализованных этим классом

getGenericInterfaces

public Type[] getGenericInterfaces()
Возвращает Type объекты, представляющие интерфейсы, напрямую реализуемые классом или интерфейсом, представленным этим Class объектом.

Если суперинтерфейс является параметризованным типом, возвращаемый Type объект должен точно отражать фактические типы аргументов, используемые в исходном коде. Параметризованный тип, представляющий каждый суперинтерфейс, создаётся, если он ещё не был создан. См. объявление ParameterizedType для семантики процесса создания параметризованных типов.

Если этот Class объект представляет класс, возвращаемое значение — массив, содержащий объекты, представляющие все интерфейсы, напрямую реализуемые классом. Порядок интерфейсных объектов в массиве соответствует порядку имён интерфейсов в implements части объявления класса, представленного этим Class объектом.

Если этот Class объект представляет интерфейс, массив содержит объекты, представляющие все интерфейсы, напрямую расширяемые этим интерфейсом. Порядок интерфейсных объектов в массиве соответствует порядку имён интерфейсов в extends части объявления интерфейса, представленного этим Class объектом.

Если этот Class объект представляет класс или интерфейс, не реализующий никаких интерфейсов, метод возвращает массив длины 0.

Если этот Class объект представляет примитивный тип или void, метод возвращает массив длины 0.

Если этот Class объект представляет тип массива, возвращаются интерфейсы Cloneable и java.io.Serializable в указанном порядке.

Возвращает:
массив интерфейсов, напрямую реализованных этим классом
Исключения:
GenericSignatureFormatError - если сигнатура дженерик-класса не соответствует формату, указанному в разделе 4.7.9 спецификации Java Virtual Machine.
TypeNotPresentException - если какой-либо из дженерик-суперинтерфейсов ссылается на несуществующее объявление типа.
MalformedParameterizedTypeException - если любой из дженерик-суперинтерфейсов ссылается на параметризованный тип, который нельзя создать ни по какой причине.
См.:
1.5

getComponentType

public Class<?> getComponentType()
Возвращает Class, представляющий компонентный тип массива. Если этот класс не представляет массив, метод возвращает null.
Возвращает:
Class, представляющий компонентный тип этого класса, если этот класс является массивом
См.:
1.1
См. также:
  • Array

getModifiers

public int getModifiers()
Возвращает модификаторы языка Java для этого класса или интерфейса, закодированные в целое число. Модификаторы состоят из констант виртуальной машины Java для public, protected, private, final, static, abstract и interface; они должны быть декодированы с помощью методов класса Modifier.

Если базовый класс является классом массива:

  • его public, private и protected модификаторы такие же, как у его компонентного типа
  • его abstract и final модификаторы всегда true
  • его модификатор интерфейса всегда false, даже если компонентный тип является интерфейсом
Если этот Class объект представляет примитивный тип или void, его public, abstract и final модификаторы всегда true. Для Class объектов, представляющих void, примитивные типы и массивы, значения других модификаторов false, кроме указанных выше.

Кодировки модификаторов определены в разделе 4.1 спецификации Java Virtual Machine.

Возвращает:
int, представляющий модификаторы для этого класса
См. Спецификацию языка Java:
8.1.1 Модификаторы классов
9.1.1 Модификаторы интерфейсов
См. Спецификацию виртуальной машины Java:
4.1 Структура ClassFile
См.:
1.1
См. также:
  • Modifier
  • accessFlags()
  • Моделирование языка программирования Java и JVM в ядре рефлексии

accessFlags

public Set<AccessFlag> accessFlags()
Возвращает неизменяемый набор флагов доступа для этого класса, возможно пустой.

Если базовый класс является классом массива:

  • его PUBLIC, PRIVATE и PROTECTED флаги доступа такие же, как у его компонентного типа
  • его ABSTRACT и FINAL флаги присутствуют
  • его INTERFACE флаг отсутствует, даже если компонентный тип является интерфейсом
Если этот Class объект представляет примитивный тип или void, флаги являются PUBLIC, ABSTRACT и FINAL. Для Class объектов, представляющих void, примитивные типы и массивы, флаги доступа отсутствуют, кроме указанных выше.
Возвращает:
неизменяемый набор флагов доступа для этого класса, возможно пустой
См. Спецификацию виртуальной машины Java:
4.1 Структура ClassFile
4.7.6 Атрибут InnerClasses
См.:
20
См. также:
  • getModifiers()

getSigners

public Object[] getSigners()
Получает подписи этого класса.
Возвращает:
подписи этого класса или null, если подписей нет. В частности, этот метод возвращает null, если этот Class объект представляет примитивный тип или void.
См.:
1.1

getEnclosingMethod

public Method getEnclosingMethod()
Если этот Class объект представляет локальный или анонимный класс внутри метода, возвращает объект Method, представляющий непосредственно окружающий метод базового класса. В противном случае возвращает null. В частности, этот метод возвращает null, если базовый класс является локальным или анонимным классом, непосредственно заключённым в объявление класса или интерфейса, инициализатор экземпляра или статический инициализатор.
Возвращает:
непосредственно окружающий метод базового класса, если этот класс является локальным или анонимным; в противном случае null.
См.:
1.5

getEnclosingConstructor

public Constructor<?> getEnclosingConstructor()
Если этот Class объект представляет локальный или анонимный класс внутри конструктора, возвращает объект Constructor, представляющий непосредственно охватывающий конструктор базового класса. В противном случае возвращает null. В частности, этот метод возвращает null, если базовый класс является локальным или анонимным классом, непосредственно заключённым в объявление класса или интерфейса, инициализатор экземпляра или статический инициализатор.
Returns:
непосредственно охватывающий конструктор базового класса, если этот класс является локальным или анонимным; в противном случае null.
Since:
1.5

getDeclaringClass

public Class<?> getDeclaringClass()
Если класс или интерфейс, представленный этим Class объектом, является членом другого класса, возвращает объект Class, представляющий класс, в котором он был объявлен. Этот метод возвращает null, если этот класс или интерфейс не является членом другого класса. Если этот Class объект представляет класс массива, примитивный тип или void, то этот метод возвращает null.
Returns:
объявляющий класс для этого класса
Since:
1.1

getEnclosingClass

public Class<?> getEnclosingClass()
Возвращает непосредственно охватывающий класс базового класса. Если базовый класс является классом верхнего уровня, этот метод возвращает null.
Returns:
непосредственно охватывающий класс базового класса
Since:
1.5

getSimpleName

public String getSimpleName()
Возвращает простое имя базового класса, как указано в исходном коде. Пустая строка возвращается, если базовый класс является анонимным. Синтетический класс, отсутствующий в исходном коде, может иметь ненулевое имя, включающее специальные символы, такие как "$".

Простое имя класса массива — это простое имя типа компонента с добавленным "[]". В частности, простое имя класса массива, тип компонента которого анонимен, — это "[]".

Returns:
простое имя базового класса
Since:
1.5

getTypeName

public String getTypeName()
Возвращает информативную строку для имени этого класса или интерфейса.
Specified by:
getTypeName в интерфейсе Type
Returns:
информативная строка для имени этого класса или интерфейса
Since:
1.8

getCanonicalName

public String getCanonicalName()
Возвращает каноническое имя базового класса, определённое в Спецификации языка Java. Возвращает null, если базовый класс не имеет канонического имени. К классам без канонических имён относятся:
  • локальный класс local class
  • анонимный класс anonymous class
  • скрытый класс hidden class
  • массив, тип компонента которого не имеет канонического имени
Каноническое имя примитивного класса — это ключевое слово соответствующего примитивного типа (byte, short, char, int и так далее).

Тип массива имеет каноническое имя тогда и только тогда, когда его компонентный тип имеет каноническое имя. Когда у типа массива есть каноническое имя, оно равно каноническому имени компонентного типа, за которым следует "[]".

Returns:
каноническое имя базового класса, если оно существует; в противном случае null.
См. Спецификацию языка Java:
6.7 Полные имена и канонические имена
Since:
1.5

isAnonymousClass

public boolean isAnonymousClass()
Возвращает true тогда и только тогда, когда базовый класс является анонимным классом.
API Note:
Анонимный класс не является скрытым классом.
Returns:
true тогда и только тогда, когда этот класс является анонимным классом.
См. Спецификацию языка Java:
15.9.5 Объявления анонимных классов
Since:
1.5

isLocalClass

public boolean isLocalClass()
Возвращает true тогда и только тогда, когда базовый класс является локальным классом.
Returns:
true тогда и только тогда, когда этот класс является локальным классом.
См. Спецификацию языка Java:
14.3 Локальные классы и интерфейсы
Since:
1.5

isMemberClass

public boolean isMemberClass()
Возвращает true тогда и только тогда, когда базовый класс является внутренним классом.
Returns:
true тогда и только тогда, когда этот класс является внутренним классом.
См. Спецификацию языка Java:
8.5 Внутренние классы и интерфейсы
Since:
1.5

getClasses

public Class<?>[] getClasses()
Возвращает массив, содержащий объекты Class, представляющие все публичные классы и интерфейсы, которые являются членами класса, представленного этим объектом Class. Это включает в себя публичные классы и интерфейсы, унаследованные от суперклассов, и публичные классы и интерфейсы, объявленные классом. Этот метод возвращает массив длины 0, если у этого объекта Class нет публичных вложенных классов или интерфейсов. Этот метод также возвращает массив длины 0, если этот объект Class представляет примитивный тип, класс массива или void.
Returns:
массив объектов Class, представляющих публичные члены этого класса
Since:
1.1

getFields

public Field[] getFields()
Возвращает массив, содержащий объекты Field, отражающие все доступные публичные поля класса или интерфейса, представленного этим объектом Class.

Если у этого объекта Class нет доступных публичных полей, этот метод возвращает массив длины 0.

Если этот объект Class представляет класс, этот метод возвращает публичные поля класса и всех его суперклассов и суперинтерфейсов.

Если этот объект Class представляет интерфейс, этот метод возвращает поля интерфейса и всех его суперинтерфейсов.

Если этот объект Class представляет тип массива, примитивный тип или void, этот метод возвращает массив длины 0.

Элементы в возвращаемом массиве не отсортированы и не расположены в определённом порядке.

Returns:
массив объектов Field, представляющих публичные поля
См. Спецификацию языка Java:
8.2 Члены класса
8.3 Объявления полей
Since:
1.1

getMethods

public Method[] getMethods()
Возвращает массив, содержащий объекты Method, отражающие все публичные методы класса или интерфейса, представленного этим объектом Class, включая объявленные в классе или интерфейсе и унаследованные от суперклассов и суперинтерфейсов.

Если этот объект Class представляет тип массива, то возвращаемый массив содержит объект Method для каждого из публичных методов, унаследованных массивом от типа Object. Он не содержит объект Method для clone().

Если этот объект Class представляет интерфейс, то возвращаемый массив не содержит никаких неявно объявленных методов из Object. Следовательно, если в этом интерфейсе или любом из его суперинтерфейсов явно не объявлены методы, то возвращаемый массив имеет длину 0. (Обратите внимание, что объект Class, представляющий класс, всегда имеет публичные методы, унаследованные от Object.)

Возвращаемый массив никогда не содержит методы с именами "<init>" или "<clinit>".

Элементы в возвращаемом массиве не отсортированы и не расположены в определенном порядке.

В общем случае результат вычисляется по следующему алгоритму из 4 шагов. Пусть C — класс или интерфейс, представленный этим объектом Class:

  1. Объединение методов состоит из:
    1. Объявленных публичных методов экземпляра и статических методов C, возвращаемых методом getDeclaredMethods() и отфильтрованных для включения только публичных методов.
    2. Если C — класс, отличный от Object, то включается результат применения этого алгоритма рекурсивно к суперклассу C.
    3. Включаются результаты применения этого алгоритма рекурсивно ко всем прямым суперинтерфейсам C, но включаются только методы экземпляра.
  2. Объединение из шага 1 разбивается на подмножества методов с одинаковой сигнатурой (имя, типы параметров) и типом возвращаемого значения.
  3. Внутри каждого такого подмножества выбираются только наиболее специфичные методы. Пусть метод M — метод из множества методов с одинаковой сигнатурой и типом возвращаемого значения. M является наиболее специфичным, если не существует такого метода N != M из того же множества, что N более специфичен, чем M. N более специфичен, чем M, если:
    1. N объявлен классом, а M — интерфейсом; или
    2. N и M объявлены как классами, так и интерфейсами, и тип объявления N такой же или является подтипом типа объявления M (очевидно, если типы объявления M и N совпадают, то M и N — один и тот же метод).
  4. Результат этого алгоритма — объединение всех выбранных методов из шага 3.
API Note:
Может быть более одного метода с определенным именем и типами параметров в классе, поскольку, хотя язык Java запрещает классу объявлять несколько методов с одинаковой сигнатурой, но разными типами возвращаемого значения, виртуальная машина Java не делает этого. Эта повышенная гибкость в виртуальной машине может быть использована для реализации различных языковых функций. Например, ковариантные возвращаемые значения могут быть реализованы с помощью мостов методов; мост метода и переопределяемый метод будут иметь одинаковую сигнатуру, но разные типы возвращаемых значений.
Возвращает:
массив объектов Method, представляющих публичные методы этого класса
См. Спецификацию языка Java:
8.2 Члены класса
8.4 Объявления методов
С тех пор как:
1.1

getConstructors

public Constructor<?>[] getConstructors()
Возвращает массив, содержащий объекты Constructor, отражающие все публичные конструкторы класса, представленного этим объектом Class. Массив длиной 0 возвращается, если у класса нет публичных конструкторов, или если класс является классом массива, или если класс отражает примитивный тип или void.
API Note:
Хотя этот метод возвращает массив объектов Constructor<T> (т. е. массив конструкторов из этого класса), тип возврата этого метода — Constructor<?>[], а не Constructor<T>[], как можно было бы ожидать. Этот менее информативный тип возврата необходим, так как после возврата из этого метода массив может быть изменён для хранения объектов Constructor для разных классов, что нарушило бы гарантии типа Constructor<T>[].
Возвращает:
массив объектов Constructor, представляющих публичные конструкторы этого класса
С тех пор как:
1.1
См. также:
  • getDeclaredConstructors()

getField

public Field getField(String name) throws NoSuchFieldException
Возвращает объект Field, который отражает указанное публичное поле члена класса или интерфейса, представленного этим объектом Class. Параметр name представляет собой строку String, задающую простое имя желаемого поля.

Поле, подлежащее отражению, определяется следующим алгоритмом. Пусть C — класс или интерфейс, представленный этим объектом Class:

  1. Если C объявляет публичное поле с указанным именем, то это поле подлежит отражению.
  2. Если поле не было найдено на шаге 1, этот алгоритм применяется рекурсивно к каждому прямому суперинтерфейсу C. Прямые суперинтерфейсы просматриваются в порядке их объявления.
  3. Если поле не было найдено на шагах 1 и 2, и C имеет суперкласс S, то этот алгоритм вызывается рекурсивно для S. Если у C нет суперкласса, то выбрасывается исключение NoSuchFieldException.

Если этот объект Class представляет тип массива, то этот метод не находит поле length типа массива.

Параметры:
name - имя поля
Возвращает:
объект Field этого класса, указанный параметром name
Исключения:
NoSuchFieldException - если поле с указанным именем не найдено.
NullPointerException - если name является null
См. Спецификацию языка Java:
8.2 Члены класса
8.3 Объявления полей
С тех пор как:
1.1

getMethod

public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException
Возвращает объект Method, который отражает указанный публичный член-метод класса или интерфейса, представленного этим объектом Class. Параметр name — это String, указывающий простое имя желаемого метода. Параметр parameterTypes — это массив объектов Class, которые идентифицируют формальные типы параметров метода в объявленном порядке. Если parameterTypes равно null, оно обрабатывается так, как если бы оно было пустым массивом.

Если этот объект Class представляет тип массива, то этот метод находит любой публичный метод, унаследованный типом массива от Object, за исключением метода clone().

Если этот объект Class представляет интерфейс, то этот метод не находит ни одного неявно объявленного метода из Object. Поэтому, если в этом интерфейсе или любом из его суперинтерфейсов явно не объявлены методы, то этот метод не находит ни одного метода.

Этот метод не находит ни одного метода с именем "<init>" или "<clinit>".

В целом, метод для отражения определяется алгоритмом из 4 шагов, который следует ниже. Пусть C — класс или интерфейс, представленный этим объектом Class:

  1. Объединение методов состоит из:
    1. Объявленных публичных экземпляров и статических методов C, возвращаемых getDeclaredMethods(), и отфильтрованных для включения только публичных методов, которые соответствуют заданным name и parameterTypes
    2. Если C — класс, отличный от Object, то включите результат применения этого алгоритма рекурсивно к суперклассу C.
    3. Включите результаты применения этого алгоритма рекурсивно ко всем прямым суперинтерфейсам C, но включите только методы экземпляров.
  2. Это объединение разбивается на подмножества методов с одинаковым типом возвращаемого значения (выбор методов из шага 1 также гарантирует, что у них одинаковое имя метода и типы параметров).
  3. В каждом таком подмножестве выбираются только наиболее специфичные методы. Пусть метод M — метод из набора методов с одинаковой виртуальной машиной (тип возвращаемого значения, имя, типы параметров). M — наиболее специфичный, если нет такого метода N != M из того же набора, такого что N более специфичен, чем M. N более специфичен, чем M, если:
    1. N объявлен классом, а M — интерфейсом; или
    2. N и M объявлены как классами, так и интерфейсами, и тип объявления N такой же, как или подтип типа объявления M (очевидно, если типы объявления M и N — один и тот же тип, то M и N — один и тот же метод).
  4. Результат этого алгоритма выбирается произвольно из методов с наиболее специфичным типом возвращаемого значения среди всех выбранных методов с шага 3. Пусть R — тип возвращаемого значения метода M из множества всех выбранных методов с шага 3. M — метод с наиболее специфичным типом возвращаемого значения, если нет такого метода N != M из того же набора, имеющего тип возвращаемого значения S != R, такого что S — подтип R, как определено R.class.isAssignableFrom(java.lang.Class<?>)(S.class).
API Note:
Может быть более одного метода с совпадающими именем и типами параметров в классе, потому что, хотя язык Java запрещает классу объявлять несколько методов с одинаковой сигнатурой, но разными типами возвращаемых значений, виртуальная машина Java этого не делает. Эта повышенная гибкость в виртуальной машине может использоваться для реализации различных функций языка. Например, ковариантные возвращаемые значения могут быть реализованы с помощью мостов методов; у мостового метода и переопределяющего метода будет одинаковая сигнатура, но разные типы возвращаемых значений. Этот метод вернёт переопределяющий метод, поскольку он будет иметь более специфичный тип возвращаемого значения.
Parameters:
name — имя метода
parameterTypes — список параметров
Returns:
объект Method, который соответствует указанному name и parameterTypes
Throws:
NoSuchMethodException — если метод с совпадением не найден или если имя равно "<init>" или "<clinit>".
NullPointerException — если name равно null
See Java Language Specification:
8.2 Class Members
8.4 Method Declarations
Since:
1.1

getConstructor

public Constructor<T> getConstructor(Class<?>... parameterTypes) throws NoSuchMethodException
Возвращает объект Constructor, который отражает указанный публичный конструктор класса, представленного этим объектом Class. Параметр parameterTypes — это массив объектов Class, которые идентифицируют формальные типы параметров конструктора в объявленном порядке. Если этот объект Class представляет вложенный класс, объявленный в контексте, не являющемся статическим, формальные типы параметров включают явную внешнюю инстанцию в качестве первого параметра.

Конструктор для отражения — это публичный конструктор класса, представленного этим объектом Class, формальные типы параметров которого соответствуют указанным в parameterTypes.

Parameters:
parameterTypes — массив параметров
Returns:
объект Constructor публичного конструктора, который соответствует указанным parameterTypes
Throws:
NoSuchMethodException — если подходящий конструктор не найден, включая случаи, когда этот объект Class представляет интерфейс, примитивный тип, класс массива или void.
Since:
1.1
See Also:
  • getDeclaredConstructor(Class[])

getDeclaredClasses

public Class<?>[] getDeclaredClasses()
Возвращает массив объектов Class, отражающих все классы и интерфейсы, объявленные как члены класса, представленного этим объектом Class. Это включает публичные, защищённые, по умолчанию (пакетные) и приватные классы и интерфейсы, объявленные классом, но исключает унаследованные классы и интерфейсы. Этот метод возвращает массив длиной 0, если класс не объявляет никаких классов или интерфейсов как членов, или если этот объект Class представляет примитивный тип, класс массива или void.
Returns:
массив объектов Class, представляющих все объявленные члены этого класса
See Java Language Specification:
8.5 Member Class and Interface Declarations
Since:
1.1

getDeclaredFields

public Field[] getDeclaredFields()
Возвращает массив объектов Field, отражающих все поля, объявленные классом или интерфейсом, представленным этим объектом Class. Это включает публичные, защищённые, по умолчанию (пакетные) и приватные поля, но исключает унаследованные поля.

Если этот объект Class представляет класс или интерфейс без объявленных полей, то этот метод возвращает массив длиной 0.

Если этот объект Class представляет тип массива, примитивный тип или void, то этот метод возвращает массив длиной 0.

Элементы в возвращаемом массиве не отсортированы и не упорядочены каким-либо определённым образом.

Returns:
массив объектов Field, представляющих все объявленные поля этого класса
See Java Language Specification:
8.2 Class Members
8.3 Field Declarations
Since:
1.1

getRecordComponents

public RecordComponent[] getRecordComponents()
Возвращает массив объектов RecordComponent, представляющих все компоненты записи этого класса записей, или null, если этот класс не является классом записей.

Компоненты возвращаются в том же порядке, в котором они объявлены в заголовке записи. Массив пуст, если у этого класса записей нет компонентов. Если класс не является классом записей, то есть isRecord() возвращает false, то этот метод возвращает null. И наоборот, если isRecord() возвращает true, то этот метод возвращает ненулевое значение.

API Note:

Следующий метод может быть использован для поиска канонического конструктора записей:

static <T extends Record> Constructor<T> getCanonicalConstructor(Class<T> cls)
    throws NoSuchMethodException {
  Class<?>[] paramTypes =
    Arrays.stream(cls.getRecordComponents())
          .map(RecordComponent::getType)
          .toArray(Class<?>[]::new);
  return cls.getDeclaredConstructor(paramTypes);
}
Returns:
Массив объектов RecordComponent, представляющих все компоненты записи этого класса записей, или null, если этот класс не является классом записей
See Java Language Specification:
8.10 Record Classes
Since:
16

getDeclaredMethods

public Method[] getDeclaredMethods()
Возвращает массив объектов, отражающих все объявленные методы класса или интерфейса, представленного этим объектом, включая методы с доступом public, protected, default (package) и private, но исключая наследуемые методы. Объявленные методы могут включать методы, не присутствующие в исходном коде класса или интерфейса, включая мостовые методы и другие синтетические методы, добавленные компиляторами.

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

Если этот объект представляет класс или интерфейс, имеющий метод инициализации класса "<clinit>", то возвращаемый массив не содержит соответствующего объекта.

Если этот объект представляет класс или интерфейс без объявленных методов, то возвращаемый массив имеет длину 0.

Если этот объект представляет тип массива, примитивный тип или void, то возвращаемый массив имеет длину 0.

Элементы в возвращаемом массиве не отсортированы и не упорядочены каким-либо определённым образом.

Возвращает:
массив объектов, представляющих все объявленные методы этого класса
См. Спецификацию языка Java:
8.2 Члены класса
8.4 Объявления методов
С:
1.1
См. также:
  • Моделирование языка программирования Java и JVM в ядре рефлексии

getDeclaredConstructors

public Constructor<?>[] getDeclaredConstructors()
Возвращает массив объектов, отражающих все конструкторы, явно или неявно объявленные классом, представленным этим объектом. Это конструкторы с доступом public, protected, default (package) и private. Элементы возвращаемого массива не отсортированы и не упорядочены каким-либо определённым образом. Если класс имеет конструктор по умолчанию (JLS 8.8.9), он включается в возвращаемый массив. Если класс-запись имеет канонический конструктор (JLS 8.10.4.1, 8.10.4.2), он включается в возвращаемый массив. Этот метод возвращает массив длиной 0, если этот объект представляет интерфейс, примитивный тип, класс массива или void.
Возвращает:
массив объектов, представляющих все объявленные конструкторы этого класса
См. Спецификацию языка Java:
8.8 Объявления конструкторов
С:
1.1
См. также:
  • getConstructors()

getDeclaredField

public Field getDeclaredField(String name) throws NoSuchFieldException
Возвращает объект, отражающий указанное объявленное поле класса или интерфейса, представленного этим объектом. Параметр `name` — это строка, определяющая простое имя искомого поля.

Если этот объект представляет тип массива, то этот метод не находит поле массива.

Параметры:
`name` - имя поля
Возвращает:
объект для указанного поля в этом классе
Исключения:
NoSuchFieldException - если поле с указанным именем не найдено.
NullPointerException - если `name` является `null`
См. Спецификацию языка Java:
8.2 Члены класса
8.3 Объявления полей
С:
1.1

getDeclaredMethod

public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException
Возвращает объект, отражающий указанный объявленный метод класса или интерфейса, представленного этим объектом. Параметр `name` — это строка, определяющая простое имя искомого метода, а параметр `parameterTypes` — массив объектов, определяющих типы формальных параметров метода в объявленном порядке. Если в классе объявлено более одного метода с одинаковыми типами параметров и один из этих методов имеет более специфичный тип возвращаемого значения, то возвращается этот метод; в противном случае выбирается один из методов произвольно. Если имя равно "<init>" или "<clinit>" генерируется исключение.

Если этот объект представляет тип массива, то этот метод не находит метод.

Параметры:
`name` - имя метода
`parameterTypes` - массив типов параметров
Возвращает:
объект для метода этого класса, соответствующий заданному имени и параметрам
Исключения:
NoSuchMethodException - если метод с указанными параметрами не найден.
NullPointerException - если `parameterTypes` является `null`
См. Спецификацию языка Java:
8.2 Члены класса
8.4 Объявления методов
С:
1.1

getDeclaredConstructor

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) throws NoSuchMethodException
Возвращает объект, отражающий указанный конструктор класса, представленного этим объектом. Параметр `parameterTypes` — массив объектов, определяющих типы формальных параметров конструктора в объявленном порядке. Если этот объект представляет внутренний класс, объявленный в контексте не статического класса, типы формальных параметров включают явную внешнюю инстанцию как первый параметр.
Параметры:
`parameterTypes` - массив типов параметров
Возвращает:
Объект для конструктора со списком указанных параметров
Исключения:
NoSuchMethodException - если соответствующий конструктор не найден, в том числе, если этот объект представляет интерфейс, примитивный тип, класс массива или void.
С:
1.1
См. также:
  • getConstructor(Class[])

getResourceAsStream

public InputStream getResourceAsStream(String name)
Находит ресурс с заданным именем.

Если этот класс находится в именованном Module, то этот метод попытается найти ресурс в модуле. Это делается путём делегирования методу загрузчика классов модуля findResource(String,String), вызвав его с именем модуля и абсолютным именем ресурса. Ресурсы в именованных модулях подчиняются правилам инкапсуляции, указанным в Module getResourceAsStream, и поэтому этот метод возвращает null, когда ресурс не является ресурсом типа ".class" в пакете, который не открыт для модуля вызывающего.

В противном случае, если этот класс не находится в именованном модуле, правила поиска ресурсов, связанных с данным классом, реализуются определяющим загрузчиком классов класса. Этот метод делегирует загрузчику классов этого объекта. Если этот объект был загружен загрузчиком Bootstrap, метод делегирует вызов ClassLoader.getSystemResourceAsStream(java.lang.String).

Перед делегированием из заданного имени ресурса строится абсолютное имя ресурса по следующему алгоритму:

  • Если имя `name` начинается с символа '/', ('\u002f'), то абсолютное имя ресурса — это часть `name`, следующая за символом '/'.
  • В противном случае абсолютное имя имеет следующий вид:
    `/[пакетное имя]/[имя ресурса]`

    Где `[пакетное имя]` — это имя пакета данного объекта с заменой '/' на '.' ('\u002e').

Параметры:
`name` - имя искомого ресурса
Возвращает:
объект InputStream; null, если ресурс с данным именем не найден или ресурс находится в пакете, который не открыт по крайней мере для модуля вызывающего.
Исключения:
NullPointerException - Если `name` является `null`
С:
1.1
См. также:
  • Module.getResourceAsStream(String)

getResource

public URL getResource(String name)
Находит ресурс с заданным именем.

Если этот класс находится в именованном Module, то этот метод попытается найти ресурс в модуле. Это делается путём делегирования в модульному загрузчику классов findResource(String,String) методу, вызывая его с именем модуля и абсолютным именем ресурса. Ресурсы в именованных модулях подчиняются правилам инкапсуляции, определённым в Module getResourceAsStream методе, и поэтому этот метод возвращает null, когда ресурс является не-".class" ресурсом в пакете, который не открыт для модуля вызывающего.

В противном случае, если этот класс не находится в именованном модуле, правила поиска ресурсов, связанных с данным классом, реализуются определяющим загрузчиком классов класса. Этот метод делегирует загрузчику классов этого объекта Class. Если этот объект Class был загружен загрузчиком Bootstrap, метод делегирует ClassLoader.getSystemResource(java.lang.String).

Перед делегированием абсолютное имя ресурса строится из заданного имени ресурса с помощью следующего алгоритма:

  • Если name начинается с '/' ('\u002f'), то абсолютное имя ресурса — это часть name, следующая за '/'.
  • В противном случае абсолютное имя имеет следующий вид:
    modified_package_name/name

    Где modified_package_name — имя пакета этого объекта с '/', заменённым на '.' ('\u002e').

Параметры:
name - имя искомого ресурса
Возвращает:
Объект URL; null если ресурс с этим именем не найден, ресурс не может быть определён по URL, или ресурс находится в пакете, который не открыт по крайней мере для модуля вызывающего.
Выбрасывает:
NullPointerException - Если name является null
С:
1.1

getProtectionDomain

public ProtectionDomain getProtectionDomain()
Возвращает ProtectionDomain этого класса.
Возвращает:
ProtectionDomain этого класса
С:
1.2
См. также:
  • ProtectionDomain

desiredAssertionStatus

public boolean desiredAssertionStatus()
Возвращает состояние утверждения, которое было бы присвоено этому классу, если бы он был инициализирован в момент вызова этого метода. Если состояние утверждения этого класса было установлено, будет возвращено последнее установленное значение; в противном случае, если для этого класса установлено какое-либо значение состояния утверждения по умолчанию для пакета, возвращается последнее значение для самого конкретного соответствующего значения состояния утверждения по умолчанию; в противном случае, если этот класс не является системным классом (т.е. у него есть загрузчик классов), возвращается значение состояния утверждения по умолчанию загрузчика классов; в противном случае возвращается значение системного состояния утверждения по умолчанию.
Примечание API:
Многим программистам этот метод не понадобится; он предоставляется для собственного использования JDK. (Он позволяет классу определить в момент инициализации, должны ли быть включены утверждения.) Обратите внимание, что этот метод не гарантирует возвращение фактического состояния утверждения, которое было (или будет) связано с указанным классом при его (или будущем) инициализации.
Возвращает:
желаемое состояние утверждения указанного класса.
С:
1.4
См. также:
  • ClassLoader.setClassAssertionStatus(java.lang.String, boolean)
  • ClassLoader.setPackageAssertionStatus(java.lang.String, boolean)
  • ClassLoader.setDefaultAssertionStatus(boolean)

isEnum

public boolean isEnum()
Возвращает true, если и только если этот класс был объявлен как перечисление в исходном коде. Обратите внимание, что Enum сам по себе не является классом перечисления. Также обратите внимание, что если константа перечисления объявлена с телом класса, класс этого объекта константы перечисления является анонимным классом, а не классом объявляющего класса перечисления. Метод Enum.getDeclaringClass() константы перечисления может быть использован для получения класса класса перечисления, объявляющего константу.
Возвращает:
true, если и только если этот класс был объявлен как перечисление в исходном коде
См. Спецификацию языка Java:
8.9.1 Константы перечисления
С:
1.5

isRecord

public boolean isRecord()
Возвращает true, если и только если этот класс является классом записей.

Непосредственный суперкласс класса записей — java.lang.Record. Класс записей является final. Класс записей имеет (возможно, ноль) компонентов записей; getRecordComponents() возвращает ненулевое, но возможно пустое значение для записи.

Обратите внимание, что класс Record не является классом записей, и поэтому вызов этого метода для класса Record возвращает false.

Возвращает:
true, если и только если этот класс является классом записей, иначе false
См. Спецификацию языка Java:
8.10 Классы записей
С:
16

getEnumConstants

public T[] getEnumConstants()
Возвращает элементы этого класса перечисления или null, если этот объект Class не представляет собой класс перечисления.
Возвращает:
массив, содержащий значения, составляющие класс перечисления, представленный этим Class объектом в порядке их объявления, или null, если этот Class объект не представляет собой класс перечисления
См. Спецификацию языка Java:
8.9.1 Константы перечисления
С:
1.5

cast

public T cast(Object obj)
Преобразует объект к классу или интерфейсу, представленному этим Class объектом.
Параметры:
obj - преобразуемый объект
Возвращает:
объект после преобразования, или null, если obj равен null
Выбрасывает:
ClassCastException - если объект не равен null и не может быть приведён к типу T.
С:
1.5

asSubclass

public <U> Class<? extends U> asSubclass(Class<U> clazz)
Преобразует этот Class объект для представления подкласса класса, представленного указанным объектом класса. Проверяет, что преобразование допустимо, и выбрасывает ClassCastException, если это не так. Если этот метод выполняется успешно, он всегда возвращает ссылку на этот Class объект.

Этот метод полезен, когда клиенту необходимо "сузить" тип Class объекта, чтобы передать его в API, который ограничивает Class объекты, которые он готов принять. Преобразование сгенерирует предупреждение на этапе компиляции, так как корректность преобразования нельзя проверить во время выполнения (потому что обобщённые типы реализуются путём стирания).

Параметры типа:
U - тип для преобразования этого Class объекта
Параметры:
clazz - класс типа, к которому нужно преобразовать этот Class объект
Возвращает:
этот Class объект, преобразованный для представления подкласса указанного объекта класса.
Выбрасывает:
ClassCastException - если этот Class объект не представляет собой подкласс указанного класса (здесь "подкласс" включает сам класс).
С:
1.5

getAnnotation

public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
Возвращает аннотацию этого элемента для указанного типа, если такая аннотация присутствует, иначе null.

Обратите внимание, что любая аннотация, возвращаемая этим методом, является аннотацией объявления.

Определено в:
getAnnotation в интерфейсе AnnotatedElement
Параметры типа:
A - тип аннотации, для запроса и возврата, если она присутствует
Параметры:
annotationClass - объект Class, соответствующий типу аннотации
Возвращает:
аннотация элемента для указанного типа аннотации, если она присутствует на этом элементе, иначе null
Выбрасывает:
NullPointerException - если указанный класс аннотации равен null
С:
1.5

isAnnotationPresent

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
Возвращает true, если аннотация указанного типа присутствует на этом элементе, иначе false. Этот метод предназначен в первую очередь для удобного доступа к аннотациям-меткам.

Логическое значение, возвращаемое этим методом, эквивалентно: getAnnotation(annotationClass) != null

Specified by:
isAnnotationPresent в интерфейсе AnnotatedElement
Parameters:
annotationClass - объект Class, соответствующий типу аннотации
Returns:
true, если аннотация указанного типа аннотации присутствует на этом элементе, иначе false
Throws:
NullPointerException - если переданный класс аннотации равен null
Since:
1.5

getAnnotationsByType

public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass)
Возвращает аннотации, связанные с этим элементом. Если аннотаций, связанных с этим элементом, нет, возвращается массив длины 0. Различие между этим методом и AnnotatedElement.getAnnotation(Class) заключается в том, что этот метод определяет, является ли его аргумент повторяющимся типом аннотации (JLS 9.6), и если да, то пытается найти одну или несколько аннотаций этого типа, «просматривая» контейнерную аннотацию. Вызывающая сторона этого метода свободна изменять возвращаемый массив; это не повлияет на массивы, возвращаемые другим вызывающим сторонам.

Обратите внимание, что все аннотации, возвращаемые этим методом, являются аннотациями объявления.

Specified by:
getAnnotationsByType в интерфейсе AnnotatedElement
Type Parameters:
A - тип аннотации, для которой выполняется запрос и которая возвращается, если она присутствует
Parameters:
annotationClass - объект Class, соответствующий типу аннотации
Returns:
все аннотации этого элемента для указанного типа аннотации, если они связаны с этим элементом, иначе массив длины нуль
Throws:
NullPointerException - если переданный класс аннотации равен null
Since:
1.8

getAnnotations

public Annotation[] getAnnotations()
Возвращает аннотации, присутствующие на этом элементе. Если аннотаций, присутствующих на этом элементе, нет, возвращается массив длины 0. Вызывающая сторона этого метода свободна изменять возвращаемый массив; это не повлияет на массивы, возвращаемые другим вызывающим сторонам.

Обратите внимание, что все аннотации, возвращаемые этим методом, являются аннотациями объявления.

Specified by:
getAnnotations в интерфейсе AnnotatedElement
Returns:
аннотации, присутствующие на этом элементе
Since:
1.5

getDeclaredAnnotation

public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass)
Возвращает аннотацию этого элемента для указанного типа, если такая аннотация непосредственно присутствует, иначе null. Этот метод игнорирует унаследованные аннотации. (Возвращает null, если аннотации непосредственно не присутствуют на этом элементе.)

Обратите внимание, что любая аннотация, возвращаемая этим методом, является аннотацией объявления.

Specified by:
getDeclaredAnnotation в интерфейсе AnnotatedElement
Type Parameters:
A - тип аннотации, для которого выполняется запрос и которая возвращается, если она непосредственно присутствует
Parameters:
annotationClass - объект Class, соответствующий типу аннотации
Returns:
аннотация этого элемента для указанного типа аннотации, если она непосредственно присутствует на этом элементе, иначе null
Throws:
NullPointerException - если переданный класс аннотации равен null
Since:
1.8

getDeclaredAnnotationsByType

public <A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass)
Возвращает аннотацию(и) этого элемента для указанного типа, если такие аннотации непосредственно присутствуют или косвенно присутствуют. Этот метод игнорирует унаследованные аннотации. Если указанных аннотаций нет, непосредственно или косвенно присутствующих на этом элементе, возвращаемое значение — массив длиной 0. Различие между этим методом и AnnotatedElement.getDeclaredAnnotation(Class) заключается в том, что этот метод определяет, является ли его аргумент повторяющимся типом аннотации (JLS 9.6), и если да, то пытается найти одну или несколько аннотаций этого типа, «просматривая» контейнерную аннотацию, если она присутствует. Вызывающая сторона этого метода свободна изменять возвращаемый массив; это не повлияет на массивы, возвращаемые другим вызывающим сторонам.

Обратите внимание, что все аннотации, возвращаемые этим методом, являются аннотациями объявления.

Specified by:
getDeclaredAnnotationsByType в интерфейсе AnnotatedElement
Type Parameters:
A - тип аннотации, для которого выполняется запрос и которая возвращается, если она непосредственно или косвенно присутствует
Parameters:
annotationClass - объект Class, соответствующий типу аннотации
Returns:
все аннотации этого элемента для указанного типа аннотации, если они непосредственно или косвенно присутствуют на этом элементе, иначе массив длиной нуль
Throws:
NullPointerException - если переданный класс аннотации равен null
Since:
1.8

getDeclaredAnnotations

public Annotation[] getDeclaredAnnotations()
Возвращает аннотации, непосредственно присутствующие на этом элементе. Этот метод игнорирует унаследованные аннотации. Если аннотаций непосредственно присутствующих на этом элементе нет, возвращаемое значение — массив длиной 0. Вызывающая сторона этого метода свободна изменять возвращаемый массив; это не повлияет на массивы, возвращаемые другим вызывающим сторонам.

Обратите внимание, что все аннотации, возвращаемые этим методом, являются аннотациями объявления.

Specified by:
getDeclaredAnnotations в интерфейсе AnnotatedElement
Returns:
аннотации, непосредственно присутствующие на этом элементе
Since:
1.5

getAnnotatedSuperclass

public AnnotatedType getAnnotatedSuperclass()
Возвращает объект AnnotatedType, представляющий использование типа для указания суперкласса сущности, представленной этим объектом Class. (Использование типа Foo для указания суперкласса в '... extends Foo' отличается от объявления класса Foo.)

Если этот объект Class представляет класс, объявление которого не явно указывает на аннотированный суперкласс, то возвращаемое значение — объект AnnotatedType, представляющий элемент без аннотаций.

Если этот объект Class представляет либо класс Object, тип интерфейса, тип массива, примитивный тип или void, возвращаемое значение — null.

Returns:
объект, представляющий суперкласс
Since:
1.8

getAnnotatedInterfaces

public AnnotatedType[] getAnnotatedInterfaces()
Возвращает массив объектов AnnotatedType, представляющих использование типов для указания суперинтерфейсов сущности, представленной этим объектом Class. (Использование типа Foo для указания суперинтерфейса в '... implements Foo' отличается от объявления интерфейса Foo.)

Если этот объект Class представляет класс, возвращаемое значение — массив, содержащий объекты, представляющие использование типов интерфейсов для указания интерфейсов, реализуемых классом. Порядок объектов в массиве соответствует порядку типов интерфейсов, используемых в разделе 'implements' объявления этого объекта Class.

Если этот объект Class представляет интерфейс, возвращаемое значение — массив, содержащий объекты, представляющие использование типов интерфейсов для указания интерфейсов, непосредственно расширяемых интерфейсом. Порядок объектов в массиве соответствует порядку типов интерфейсов, используемых в разделе 'extends' объявления этого объекта Class.

Если этот объект Class представляет класс или интерфейс, объявление которого не явно указывает какие-либо аннотированные суперинтерфейсы, возвращаемое значение — массив длиной 0.

Если этот объект Class представляет либо класс Object, тип массива, примитивный тип или void, возвращаемое значение — массив длиной 0.

Returns:
массив, представляющий суперинтерфейсы
Since:
1.8

getNestHost

public Class<?> getNestHost()
Возвращает хост гнезда гнезда, к которому принадлежит класс или интерфейс, представленный этим Class объектом. Каждый класс и интерфейс принадлежит ровно одному гнезду. Если хост гнезда этого класса или интерфейса был ранее определён, то этот метод возвращает хост гнезда. Если хост гнезда этого класса или интерфейса не был ранее определён, то этот метод определяет хост гнезда с использованием алгоритма JVMS 5.4.4 и возвращает его. Часто класс или интерфейс принадлежит гнезду, состоящему только из себя, в этом случае этот метод возвращает this, чтобы указать, что класс или интерфейс является хостом гнезда.

Если этот Class объект представляет примитивный тип, тип массива или void, то этот метод возвращает this, указывая, что представленная сущность принадлежит гнезду, состоящему только из себя, и является хостом гнезда.

Возвращает:
хост гнезда этого класса или интерфейса
См. Спецификацию виртуальной машины Java:
4.7.28 Атрибут NestHost
4.7.29 Атрибут NestMembers
5.4.4 Управление доступом
С:
11

isNestmateOf

public boolean isNestmateOf(Class<?> c)
Определяет, является ли заданный Class объектом-соседом по гнезду для класса или интерфейса, представленного этим Class объектом. Два класса или интерфейса являются соседями по гнезду, если у них одинаковый хост гнезда.
Параметры:
c - класс для проверки
Возвращает:
true, если этот класс и c являются членами одного гнезда; и false в противном случае.
С:
11

getNestMembers

public Class<?>[] getNestMembers()
Возвращает массив, содержащий Class объекты, представляющие все классы и интерфейсы, которые являются членами гнезда, к которому принадлежит класс или интерфейс, представленный этим Class объектом. Сначала этот метод получает хост гнезда, H, гнезда, к которому принадлежит класс или интерфейс, представленный этим Class объектом. Нулевой элемент возвращаемого массива — H. Затем, для каждого класса или интерфейса C, который записывается H как член своего гнезда, этот метод пытается получить Class объект для C (используя задающий загрузчик классов текущего Class объекта), а затем получает хост гнезда гнезда, к которому принадлежит C. Классы и интерфейсы, которые записываются H как члены его гнезда, и для которых H может быть определён как их хост гнезда, обозначаются последующими элементами возвращаемого массива. Порядок таких элементов не определён. Повторения разрешены.

Если этот Class объект представляет примитивный тип, тип массива или void, то этот метод возвращает массив с одним элементом, содержащий this.

Примечание API:
Возвращаемый массив включает только члены гнезда, записанные в атрибуте NestMembers, а не любые скрытые классы, которые были добавлены в гнездо через Lookup::defineHiddenClass.
Возвращает:
массив всех классов и интерфейсов в одном гнезде с этим классом или интерфейсом
См. Спецификацию виртуальной машины Java:
4.7.28 Атрибут NestHost
4.7.29 Атрибут NestMembers
С:
11
См. также:
  • getNestHost()

descriptorString

public String descriptorString()
Возвращает строку-описатель сущности (класса, интерфейса, класса массива, примитивного типа или void), представленной этим Class объектом.

Если этот Class объект представляет класс или интерфейс, а не класс массива, то:

  • Если класс или интерфейс не скрытый, то результатом является поле описатель (JVMS 4.3.2) для класса или интерфейса. Вызов ClassDesc::ofDescriptor со строкой-описателем результата производит ClassDesc, описывающий этот класс или интерфейс.
  • Если класс или интерфейс скрытый, то результатом является строка вида:
    "L" + N + "." + <suffix> + ";"
    где N — бинарное имя, закодированное во внутреннем формате, указанном в файле class, переданном в Lookup::defineHiddenClass, и <suffix> — неопределённое имя. У скрытого класса или интерфейса нет номинального описателя. Результирующая строка не является описателем типа.

Если этот Class объект представляет класс массива, то результатом является строка, состоящая из одного или нескольких символов '[', представляющих глубину вложенности массива, за которым следует строка-описатель типа элемента.

  • Если тип элемента не является скрытым классом или интерфейсом, то этот класс массива может быть описан номинально. Вызов ClassDesc::ofDescriptor со строкой-описателем результата производит ClassDesc, описывающий этот класс массива.
  • Если тип элемента является скрытым классом или интерфейсом, то этот класс массива не может быть описан номинально. Результирующая строка не является описателем типа.

Если этот Class объект представляет примитивный тип или void, то результатом является строка-описатель поля, представляющая собой однобуквенный код, соответствующий примитивному типу или void ("B", "C", "D", "F", "I", "J", "S", "Z", "V") (JVMS 4.3.2).

Определено в:
descriptorString в интерфейсе TypeDescriptor
Возвращает:
строку-описатель для этого Class объекта
См. Спецификацию виртуальной машины Java:
4.3.2 Описатели полей
С:
12

componentType

public Class<?> componentType()
Возвращает тип компонента этого Class, если он описывает тип массива, или null в противном случае.
Определено в:
componentType в интерфейсе TypeDescriptor.OfField<T>
Требования к реализации:
Эквивалентно getComponentType().
Возвращает:
a Class, описывающий тип компонента, или null, если этот Class не описывает тип массива
С:
12

arrayType

public Class<?> arrayType()
Возвращает Class для типа массива, тип компонента которого описывается этим Class.
Определено в:
arrayType в интерфейсе TypeDescriptor.OfField<T>
Возвращает:
a Class, описывающий тип массива
Исключения:
UnsupportedOperationException - если этот тип компонента — void или если число измерений результирующего типа массива превысит 255.
См. Спецификацию виртуальной машины Java:
4.3.2 Описатели полей
4.4.1 Структура CONSTANT_Class_info
С:
12

describeConstable

public Optional<ClassDesc> describeConstable()
Возвращает номинальный описатель для этого экземпляра, если он может быть создан, или пустой Optional, если он не может быть.
Определено в:
describeConstable в интерфейсе Constable
Возвращает:
An Optional содержащий результирующий номинальный описатель, или пустой Optional, если он не может быть создан.
С:
12

isHidden

public boolean isHidden()
Возвращает true, тогда и только тогда, когда базовый класс является скрытым классом.
Возвращает:
true, тогда и только тогда, когда этот класс является скрытым классом.
С:
15
См. также:
  • MethodHandles.Lookup.defineHiddenClass(byte[], boolean, java.lang.invoke.MethodHandles.Lookup.ClassOption...)
  • Скрытые классы

getPermittedSubclasses

public Class<?>[] getPermittedSubclasses()
Возвращает массив, содержащий Class объекты, представляющие непосредственные подинтерфейсы или подклассы, разрешенные для расширения или реализации этого класса или интерфейса, если он является запечатанным. Порядок таких элементов не определён. Массив пустой, если у этого запечатанного класса или интерфейса нет разрешённых подклассов. Если этот Class объект представляет примитивный тип, void, массив типов или класс или интерфейс, который не является запечатанным, то есть isSealed() возвращает false, то этот метод возвращает null. И наоборот, если isSealed() возвращает true, то этот метод возвращает ненулевое значение. Для каждого класса или интерфейса C, который зарегистрирован как разрешённый непосредственный подинтерфейс или подкласс этого класса или интерфейса, этот метод пытается получить Class объект для C (используя классификатор загрузки текущего Class объекта). Class объекты, которые могут быть получены и которые являются непосредственными подинтерфейсами или подклассами этого класса или интерфейса, указываются элементами возвращаемого массива. Если Class объект получить не удаётся, он игнорируется, и не включается в результирующий массив.
Возвращает:
массив Class объектов разрешённых подклассов этого класса или интерфейса, или null, если этот класс или интерфейс не является запечатанным.
См. Спецификацию языка Java:
8.1 Объявления классов
9.1 Объявления интерфейсов
С:
17

isSealed

public boolean isSealed()
Возвращает true, тогда и только тогда, когда этот Class объект представляет запечатанный класс или интерфейс. Если этот Class объект представляет примитивный тип, void или массив типов, этот метод возвращает false. Запечатанный класс или интерфейс имеет (возможно, ноль) разрешённых подклассов; getPermittedSubclasses() возвращает ненулевое, но, возможно, пустое значение для запечатанного класса или интерфейса.
Возвращает:
true, тогда и только тогда, когда этот Class объект представляет запечатанный класс или интерфейс.
См. Спецификацию языка Java:
8.1 Объявления классов
9.1 Объявления интерфейсов
С:
17

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/Class.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API