Spec-Zone.ru › OpenJDK 27

Класс Class<T>

java.lang.Object
java.lang.Class<T>
Параметры типа:
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. Класс перечисления (enum) и класс записи (record) являются разновидностями классов; интерфейс аннотации является разновидностью интерфейсов. Каждый массив также принадлежит классу, который отражается в виде объекта 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 обычно регистрирует класс верхнего уровня в качестве хоста гнезда, другими членами которого являются классы и интерфейсы, чьи объявления вложены в объявление класса верхнего уровня.

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

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

Класс или интерфейс, созданный путем вызова 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)
  • Сериализованная форма

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

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

TypeDescriptor.OfField<F>, TypeDescriptor.OfMethod<F,M>
Модификатор и тип Интерфейс Описание
static interface  TypeDescriptor.OfField<F extends TypeDescriptor.OfField<F>>
Сущность, имеющая дескриптор типа поля.
static interface  TypeDescriptor.OfMethod<F extends TypeDescriptor.OfField<F>, M extends TypeDescriptor.OfMethod<F,M>>
Сущность, имеющая дескриптор типа метода. Дескрипторы методов, соответствующие JVMS §4.3.3, могут быть номинально описаны с помощью MethodType::describeConstable; в противном случае они не могут быть описаны номинально.

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

Модификатор и тип Метод Описание
Set<AccessFlag> accessFlags()
Возвращает неизменяемый набор флагов доступа для этого класса, возможно пустой.
Class<?> arrayType()
Возвращает Class для типа массива, тип компонентов которого описывается данным 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()
Возвращает статус утверждений (assertion status), который был бы назначен этому классу, если бы он инициализировался в момент вызова данного метода.
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()
Возвращает каноническое имя базового класса, как определено в The Java Language Specification.
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, включая открытые, защищенные, методы с доступом по умолчанию (в пределах пакета) и закрытые методы, но исключая унаследованные методы.
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()
Возвращает хост гнезда (nest host) гнезда, к которому принадлежит класс или интерфейс, представленный данным объектом Class.
Class<?>[] getNestMembers()
Возвращает массив, содержащий объекты Class, представляющие все классы и интерфейсы, являющиеся членами гнезда, к которому принадлежит класс или интерфейс, представленный данным объектом Class.
Package getPackage()
Возвращает пакет этого класса.
String getPackageName()
Возвращает полное имя пакета.
Class<?>[] getPermittedSubclasses()
Возвращает массив, содержащий объекты Class, представляющие непосредственные суперинтерфейсы или подклассы, которым разрешено расширять или реализовывать данный класс или интерфейс, если он является запечатанным (sealed).
ProtectionDomain getProtectionDomain()
Возвращает ProtectionDomain этого класса.
RecordComponent[] getRecordComponents()
Возвращает массив объектов RecordComponent, представляющих все компоненты этой записи (record), или null, если этот класс не является классом записи.
URL getResource(String name)
Находит ресурс с заданным именем.
InputStream getResourceAsStream(String name)
Находит ресурс с заданным именем.
Object[] getSigners()
Возвращает лиц, подписавших этот класс (signers).
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 тогда и только тогда, когда этот класс был объявлен как enum в исходном коде.
boolean isHidden()
Возвращает true тогда и только тогда, когда базовый класс является скрытым классом.
boolean isInstance(Object obj)
Определяет, совместим ли указанный Object по присваиванию с объектом, представленным данным Class.
boolean isInterface()
Определяет, представляет ли данный объект Class тип интерфейса.
boolean isLocalClass()
Возвращает true тогда и только тогда, когда базовый класс является локальным классом.
boolean isMemberClass()
Возвращает true тогда и только тогда, когда базовый класс является классом-членом.
boolean isNestmateOf(Class<?> c)
Определяет, является ли данный Class сочленом по гнезду (nestmate) класса или интерфейса, представленного данным объектом Class.
boolean isPrimitive()
Определяет, представляет ли данный объект Class примитивный тип или void.
boolean isRecord()
Возвращает true тогда и только тогда, когда этот класс является классом записи (record).
boolean isSealed()
Возвращает true тогда и только тогда, когда этот объект Class представляет запечатанный класс или интерфейс.
boolean isSynthetic()
Возвращает true тогда и только тогда, когда для этого класса установлен бит модификатора synthetic.
T newInstance()
Устарело.
Этот метод распространяет любое исключение, выброшенное конструктором без аргументов, включая проверяемые исключения.
String toGenericString()
Возвращает строку, описывающую этот Class, включая информацию о модификаторах, статусе sealed/ non-sealed и параметрах типа.
String toString()
Преобразует объект в строку.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, "равен" ли какой-либо другой объект этому объекту.
protected void finalize()
Устарело, для удаления: этот элемент API подлежит удалению в будущей версии.
Финализация устарела и подлежит удалению в будущем выпуске.
final Class<?> getClass()
Возвращает класс времени выполнения для этого Object.
int hashCode()
Возвращает значение хэш-кода для этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Приводит к тому, что текущий поток ожидает, пока он не будет разбужен, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Приводит к тому, что текущий поток ожидает, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечет определенное количество реального времени.
final void wait(long timeoutMillis, int nanos)
Приводит к тому, что текущий поток ожидает, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечет определенное количество реального времени.

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

toString

public String toString()
Преобразует объект в строку. Строковое представление представляет собой строку "class" или "interface", за которой следует пробел, а затем имя класса в формате, возвращаемом методом getName. Если этот объект Class представляет примитивный тип, данный метод возвращает имя примитивного типа. Если этот объект Class представляет void, данный метод возвращает "void". Если этот объект Class представляет тип массива, данный метод возвращает "class ", за которым следует getName.
Переопределяет:
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 Loading of Classes and Interfaces
12.3 Linking of Classes and Interfaces
12.4 Initialization of Classes and Interfaces

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 - загрузчик классов, из которого должен быть загружен класс; может быть null
Возвращает:
объект класса, представляющий требуемый класс
Исключения:
LinkageError - если связывание завершается неудачно
ExceptionInInitializerError - если инициализация, вызванная этим методом, завершается неудачно
ClassNotFoundException - если класс не удается найти с помощью указанного загрузчика классов
См. Спецификацию языка Java:
12.2 Loading of Classes and Interfaces
12.3 Linking of Classes and Interfaces
12.4 Initialization of Classes and Interfaces
13.1 The Form of a Binary
Начиная с версии:
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, если не найден.
Исключения:
LinkageError - если связывание завершается неудачно
См. Спецификацию языка Java:
12.2 Loading of Classes and Interfaces
12.3 Linking of Classes and Interfaces
Начиная с версии:
9

forPrimitiveName

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

newInstance

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

Вызов

clazz.newInstance()
можно заменить на
clazz.getDeclaredConstructor().newInstance()
Считается, что последняя последовательность вызовов может выбрасывать дополнительные типы исключений: InvocationTargetException и NoSuchMethodException. Оба этих типа исключений являются подклассами ReflectiveOperationException.
Создает новый экземпляр класса, представленного этим объектом Class. Экземпляр класса создается так, как если бы использовалось выражение new с пустым списком аргументов. Класс инициализируется, если он еще не был инициализирован.
Возвращает:
вновь выделенный экземпляр класса, представленного этим объектом.
Исключения:
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.

Параметры:
obj - проверяемый объект; может быть null
Возвращает:
true, если obj является экземпляром этого класса
Начиная с версии:
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.

Параметры:
cls - проверяемый объект Class
Возвращает:
значение boolean, указывающее, могут ли объекты типа cls быть присвоены объектам этого класса
Начиная с версии:
1.1

isInterface

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

isArray

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

isPrimitive

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

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

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

Указано в:
isPrimitive в интерфейсе TypeDescriptor.OfField<T>
Примечание к API:
К объекту Class, представляющему примитивный тип, можно получить доступ через переменные TYPE public static final, определенные в классах-обертках примитивных типов, таких как Integer.TYPE. В языке программирования Java на эти объекты можно ссылаться с помощью выражения литерала класса, такого как int.class. Объект Class для void может быть выражен как void.class или Void.TYPE.
Возвращает:
true тогда и только тогда, когда этот класс представляет примитивный тип
См. Спецификацию языка Java:
15.8.2 Class Literals
Начиная с версии:
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, поскольку все интерфейсы аннотаций также являются интерфейсами.
Возвращает:
true, если этот объект Class представляет интерфейс аннотации; false в противном случае
Начиная с версии:
1.5

isSynthetic

public boolean isSynthetic()
Возвращает true тогда и только тогда, когда для этого класса установлен бит модификатора synthetic.
Возвращает:
true тогда и только тогда, когда для этого класса установлен бит модификатора synthetic
См. Спецификацию языка Java:
13.1 The Form of a Binary
См. Спецификацию виртуальной машины Java:
4.1 The ClassFile Structure
Начиная с версии:
1.5
См. также:
  • Java programming language and JVM modeling in core reflection

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:
Различные объекты классов могут иметь одинаковые имена, но разные загрузчики классов.
Возвращает:
имя класса, интерфейса или другой сущности, представленной данным объектом Class.
См. Спецификацию языка Java:
13.1 The Form of a Binary

getClassLoader

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

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

Возвращает:
загрузчик классов, который загрузил класс или интерфейс, представленный данным объектом Class.
См. также:
  • ClassLoader

getModule

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

getTypeParameters

public TypeVariable<Class<T>>[] getTypeParameters()
Возвращает массив объектов TypeVariable, представляющих переменные типа, объявленные обобщенным объявлением, представленным данным объектом GenericDeclaration, в порядке объявления. Возвращает массив нулевой длины, если базовое обобщенное объявление не объявляет переменных типа.
Указано в:
getTypeParameters в интерфейсе GenericDeclaration
Возвращает:
массив объектов TypeVariable, представляющих переменные типа, объявленные данным обобщенным объявлением
Исключения:
GenericSignatureFormatError - если обобщенная сигнатура этого обобщенного объявления не соответствует формату, указанному в разделе §4.7.9 Спецификации виртуальной машины Java
Начиная с версии:
1.5

getSuperclass

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

getGenericSuperclass

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

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

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

getPackage

public Package getPackage()
Возвращает пакет этого класса.

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

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

getPackageName

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

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

Если этот класс является классом-членом, то этот метод эквивалентен вызову getPackageName() для обрамляющего класса.

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

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

Returns:
полное имя пакета
See Java Language Specification:
6.7 Fully Qualified Names and Canonical Names
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 представляет класс или интерфейс, который не реализует никаких интерфейсов, метод возвращает массив нулевой длины.

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

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

Returns:
массив интерфейсов, непосредственно реализованных этим классом

getGenericInterfaces

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

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

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

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

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

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

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

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

getComponentType

public Class<?> getComponentType()
Возвращает Class, представляющий тип компонентов массива. Если этот класс не представляет класс массива, этот метод возвращает null.
Returns:
Class, представляющий тип компонентов этого класса, если данный класс является массивом
Since:
1.1
See Also:
  • 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 спецификации The Java Virtual Machine Specification.

Returns:
int, представляющий модификаторы для этого класса
See Java Language Specification:
8.1.1 Class Modifiers
9.1.1 Interface Modifiers
See Java Virtual Machine Specification:
4.1 The ClassFile Structure
Since:
1.1
See Also:
  • Modifier
  • accessFlags()
  • Java programming language and JVM modeling in core reflection

accessFlags

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

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

  • его флаги доступа PUBLIC, PRIVATE и PROTECTED совпадают с флагами его типа компонентов
  • его флаги ABSTRACT и FINAL присутствуют
  • его флаг INTERFACE отсутствует, даже когда тип компонентов является интерфейсом
Если этот объект Class представляет примитивный тип или void, флагами являются PUBLIC, ABSTRACT и FINAL. Для объектов Class, представляющих void, примитивные типы и массивы, флаги доступа отсутствуют, если выше не указано иное.
Returns:
неизменяемый набор флагов доступа для этого класса, возможно, пустой
See Java Virtual Machine Specification:
4.1 The ClassFile Structure
4.7.6 The InnerClasses Attribute
Since:
20
See Also:
  • getModifiers()

getSigners

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

getEnclosingMethod

public Method getEnclosingMethod()
Если этот объект Class представляет локальный или анонимный класс внутри метода, возвращает объект Method, представляющий непосредственно обрамляющий метод базового класса. В противном случае возвращает null. В частности, этот метод возвращает null, если базовый класс является локальным или анонимным классом, непосредственно обрамленным объявлением класса или интерфейса, инициализатором экземпляра или статическим инициализатором.
Returns:
непосредственно обрамляющий метод базового класса, если этот класс является локальным или анонимным классом; в противном случае null.
Since:
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()
Возвращает каноническое имя базового класса согласно определению в The Java Language Specification. Возвращает null, если базовый класс не имеет канонического имени. Классы без канонических имен включают:
  • локальный класс
  • анонимный класс
  • скрытый класс
  • массив, тип компонентов которого не имеет канонического имени
Каноническим именем для примитивного класса является ключевое слово для соответствующего примитивного типа (byte, short, char, int и так далее).

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

Returns:
каноническое имя базового класса, если оно существует, и null в противном случае.
See Java Language Specification:
6.7 Fully Qualified Names and Canonical Names
Since:
1.5

isAnonymousClass

public boolean isAnonymousClass()
Возвращает true тогда и только тогда, когда базовый класс является анонимным классом.
API Note:
Анонимный класс не является скрытым классом.
Returns:
true тогда и только тогда, когда этот класс является анонимным классом.
See Java Language Specification:
15.9.5 Anonymous Class Declarations
Since:
1.5

isLocalClass

public boolean isLocalClass()
Возвращает true тогда и только тогда, когда базовый класс является локальным классом.
Returns:
true тогда и только тогда, когда этот класс является локальным классом.
See Java Language Specification:
14.3 Local Class and Interface Declarations
Since:
1.5

isMemberClass

public boolean isMemberClass()
Возвращает true тогда и только тогда, когда базовый класс является классом-членом.
Returns:
true тогда и только тогда, когда этот класс является классом-членом.
See Java Language Specification:
8.5 Member Class and Interface Declarations
Since:
1.5

getClasses

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

getFields

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

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

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

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

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

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

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

getMethods

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

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

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

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

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

Как правило, результат вычисляется с помощью следующего четырехэтапного алгоритма. Пусть 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 этого не запрещает. Эта повышенная гибкость виртуальной машины может использоваться для реализации различных возможностей языка. Например, ковариантные возвращаемые типы могут быть реализованы с помощью мостовых методов (bridge methods); мостовой метод и переопределяющий метод будут иметь одинаковую сигнатуру, но разные типы возвращаемых значений.
Returns:
массив объектов Method, представляющих открытые методы этого класса
See Java Language Specification:
8.2 Class Members
8.4 Method Declarations
Since:
1.1

getConstructors

public Constructor<?>[] getConstructors()
Возвращает массив, содержащий объекты Constructor, отражающие все открытые конструкторы класса, представленного данным объектом Class. Возвращается массив нулевой длины, если класс не имеет открытых конструкторов, или если класс является классом массива, или если класс отражает примитивный тип или void.
API Note:
Хотя этот метод возвращает массив объектов Constructor<T> (то есть массив конструкторов из этого класса), типом возвращаемого значения этого метода является Constructor<?>[], а не Constructor<T>[], как можно было бы ожидать. Этот менее информативный тип возвращаемого значения необходим, так как после возврата из этого метода массив можно было бы модифицировать для хранения объектов Constructor для других классов, что нарушило бы гарантии типов Constructor<T>[].
Returns:
массив объектов Constructor, представляющих открытые конструкторы этого класса
Since:
1.1
See Also:
  • 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 - если поле с указанным именем не найдено.
См. Спецификацию языка 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 — метод из набора методов с одинаковой сигнатурой VM (тип возвращаемого значения, имя, типы параметров). M является наиболее специфичным, если в том же наборе нет такого метода N != M, который более специфичен, чем 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(Class)(S.class).
Примечание к API:
В классе может быть более одного метода с совпадающими именем и типами параметров, поскольку хотя язык Java запрещает классу объявлять несколько методов с одинаковой сигнатурой, но разными типами возвращаемого значения, виртуальная машина Java этого не запрещает. Эта повышенная гибкость виртуальной машины может использоваться для реализации различных возможностей языка. Например, ковариантные возвращаемые значения могут быть реализованы с помощью мостовых методов; мостовой метод и переопределяющий метод будут иметь одинаковую сигнатуру, но разные типы возвращаемого значения. Этот метод вернет переопределяющий метод, так как он имеет более специфичный тип возвращаемого значения.
Параметры:
name - имя метода
parameterTypes - список параметров, может быть null
Возвращает:
объект Method, соответствующий указанным name и parameterTypes
Исключения:
NoSuchMethodException - если подходящий метод не найден, если parameterTypes содержит null, или если имя равно "<init>" либо "<clinit>"
См. Спецификацию языка Java:
8.2 Члены класса
8.4 Объявления методов
С версии:
1.1

getConstructor

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

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

Параметры:
parameterTypes - массив параметров, может быть null
Возвращает:
объект Constructor открытого конструктора, соответствующего указанному parameterTypes
Исключения:
NoSuchMethodException - если подходящий конструктор не найден, если этот объект Class представляет интерфейс, примитивный тип, класс массива или void, либо если parameterTypes содержит null
С версии:
1.1
См. также:
  • getDeclaredConstructor(Class[])

getDeclaredClasses

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

getDeclaredFields

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

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

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

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

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

getRecordComponents

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

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

Примечание к API:

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

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);
}
Возвращает:
Массив объектов RecordComponent, представляющих все компоненты записи этого класса записей, или null, если этот класс не является классом записей
См. Спецификацию языка Java:
8.10 Классы записей
С версии:
16

getDeclaredMethods

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

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

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

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

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

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

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

getDeclaredConstructors

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

getDeclaredField

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

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

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

getDeclaredMethod

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

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

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

getDeclaredConstructor

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

getResourceAsStream

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

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

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

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

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

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

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

getResource

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

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

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

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

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

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

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

getProtectionDomain

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

desiredAssertionStatus

public boolean desiredAssertionStatus()
Возвращает статус утверждений (assertions), который был бы назначен этому классу, если бы он инициализировался в момент вызова данного метода. Если для этого класса был явно задан статус утверждений, возвращается самая последняя настройка; в противном случае, если к этому классу относится какой-либо статус утверждений по умолчанию для пакета, возвращается самая последняя настройка наиболее конкретного применимого статуса по умолчанию для пакета; в противном случае, если этот класс не является системным классом (т. е. имеет загрузчик классов), возвращается статус утверждений по умолчанию его загрузчика классов; в противном случае возвращается статус утверждений по умолчанию для системного класса.
Примечание к API:
Лишь немногим программистам понадобится этот метод; он предназначен главным образом для самого JDK. (Он позволяет классу определить во время инициализации, должны ли быть включены утверждения.) Обратите внимание, что этот метод не гарантирует возврат фактического статуса утверждений, который был (или будет) связан с указанным классом при его инициализации.
Возвращает:
желаемый статус утверждений указанного класса.
С версии:
1.4
См. также:
  • ClassLoader.setClassAssertionStatus(String, boolean)
  • ClassLoader.setPackageAssertionStatus(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() возвращает ненулевое (non-null), но, возможно, пустое значение для записи.

Обратите внимание, что класс 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
Возвращает:
объект после приведения или 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.

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

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

isAnnotationPresent

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

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

Указано в:
isAnnotationPresent в интерфейсе AnnotatedElement
Параметры:
annotationClass - объект Class, соответствующий типу аннотации
Возвращает:
true, если аннотация указанного типа аннотации присутствует на этом элементе, иначе false
Начиная с версии:
1.5

getAnnotationsByType

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

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

Указано в:
getAnnotationsByType в интерфейсе AnnotatedElement
Параметры типа:
A - тип аннотации, которую необходимо запросить и вернуть, если она присутствует
Параметры:
annotationClass - объект Class, соответствующий типу аннотации
Возвращает:
все аннотации этого элемента для указанного типа аннотации, если они ассоциированы с этим элементом, иначе массив нулевой длины
Начиная с версии:
1.8

getAnnotations

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

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

Указано в:
getAnnotations в интерфейсе AnnotatedElement
Возвращает:
аннотации, присутствующие на этом элементе
Начиная с версии:
1.5

getDeclaredAnnotation

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

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

Указано в:
getDeclaredAnnotation в интерфейсе AnnotatedElement
Параметры типа:
A - тип аннотации, которую необходимо запросить и вернуть, если она непосредственно присутствует
Параметры:
annotationClass - объект Class, соответствующий типу аннотации
Возвращает:
аннотацию этого элемента для указанного типа аннотации, если она непосредственно присутствует на этом элементе, иначе null
Начиная с версии:
1.8

getDeclaredAnnotationsByType

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

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

Указано в:
getDeclaredAnnotationsByType в интерфейсе AnnotatedElement
Параметры типа:
A - тип аннотации, которую необходимо запросить и вернуть, если она непосредственно или косвенно присутствует
Параметры:
annotationClass - объект Class, соответствующий типу аннотации
Возвращает:
все аннотации этого элемента для указанного типа аннотации, если они непосредственно или косвенно присутствуют на этом элементе, иначе массив нулевой длины
Начиная с версии:
1.8

getDeclaredAnnotations

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

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

Указано в:
getDeclaredAnnotations в интерфейсе AnnotatedElement
Возвращает:
аннотации, непосредственно присутствующие на этом элементе
Начиная с версии:
1.5

getAnnotatedSuperclass

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

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

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

Возвращает:
объект, представляющий суперкласс
Начиная с версии:
1.8

getAnnotatedInterfaces

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

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

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

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

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

Возвращает:
массив, представляющий суперинтерфейсы
Начиная с версии:
1.8

getNestHost

public Class<?> getNestHost()
Возвращает хост гнезда (nest host) того гнезда, которому принадлежит класс или интерфейс, представленный этим объектом 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 сочленом гнезда (nestmate) класса или интерфейса, представленного этим объектом 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().
Возвращает:
Class, описывающий тип компонента, или null, если этот Class не описывает массивный тип
Начиная с версии:
12

arrayType

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

describeConstable

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

isHidden

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

getPermittedSubclasses

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

isSealed

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация по Java SE, где содержатся более подробные описания с концептуальными обзорами, определениями терминов, обходными путями и рабочими примерами кода.Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком компании Oracle и/или ее филиалов в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее филиалы, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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