Spec-Zone.ru › OpenJDK 25

Класс 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. Класс перечисления и класс записи — это разновидности класса; интерфейс аннотации — разновидность интерфейса. Каждый массив также принадлежит классу, который отражается в виде объекта Class, общего для всех массивов с одинаковым типом элементов и числом измерений. Примитивные типы Java (boolean, byte, char, short, int, long, float и double), а также ключевое слово void тоже представлены объектами Class.

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

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

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

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

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

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

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

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

Неявно объявленные классы

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

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

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

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

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

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

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

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

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

toString

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

toGenericString

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

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

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

forName

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

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

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

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

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

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

forName

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

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

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

Примеры:

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

Вызов getName() для объекта Class, возвращённого forName(N), возвращает N.

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

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

forName

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

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

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

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

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

forPrimitiveName

public static Class<?> forPrimitiveName(String primitiveName)
Возвращает объект Class, связанный с примитивным типом с указанным именем. Если аргумент не является именем примитивного типа, возвращается null.
Параметры:
primitiveName — имя искомого примитивного типа
Возвращает:
объект Class, связанный с примитивным типом с указанным именем
Исключения:
NullPointerException — если аргумент имеет значение null
См. Спецификацию языка Java:
4.2 Примитивные типы и значения
15.8.2 Литералы классов
С версии:
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, при присваивании. Этот метод является динамическим эквивалентом оператора instanceof языка Java. Метод возвращает true, если указанный аргумент Object не равен null и может быть приведён к ссылочному типу, представленному этим объектом Class, без возникновения ClassCastException.. В противном случае он возвращает false.

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

Параметры:
obj — проверяемый объект
Возвращает:
true, если obj является экземпляром этого класса
С версии:
1.1

isAssignableFrom

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

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

Параметры:
cls — объект Class, который нужно проверить
Возвращает:
значение boolean, указывающее, можно ли присваивать объекты типа cls объектам этого класса
Исключения:
NullPointerException — если указанный параметр Class равен null.
С версии:
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 Литералы классов
С версии:
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 тогда и только тогда, когда для этого класса установлен бит синтетического модификатора.
Возвращает:
true тогда и только тогда, когда для этого класса установлен бит синтетического модификатора
См. Спецификацию языка Java:
13.1 Форма двоичного представления
См. Спецификацию виртуальной машины Java:
4.1 Структура ClassFile
С версии:
1.5
См. также:
  • Моделирование языка программирования Java и JVM в базовом API рефлексии

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 Форма двоичного представления

getClassLoader

public ClassLoader getClassLoader()
Возвращает загрузчик классов данного класса. Некоторые реализации могут использовать null для обозначения загрузчика классов начальной загрузки. В таких реализациях этот метод вернёт 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.

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

getPackage

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

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

Возвращает:
пакет этого класса.

getPackageName

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

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

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

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

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

Возвращает:
полное имя пакета
См. Спецификацию языка Java:
6.7 Полные имена и канонические имена
Начиная с:
9

getInterfaces

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

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

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

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

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

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

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

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

getGenericInterfaces

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

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

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

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

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

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

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

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

getComponentType

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

getModifiers

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

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

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

Кодировки модификаторов определены в разделе 4.1 Спецификации виртуальной машины Java.

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

accessFlags

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

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

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

getSigners

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

getEnclosingMethod

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

getEnclosingConstructor

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

getDeclaringClass

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

getEnclosingClass

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

getSimpleName

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

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

Возвращает:
простое имя базового класса
Начиная с:
1.5

getTypeName

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

getCanonicalName

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

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

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

isAnonymousClass

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

isLocalClass

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

isMemberClass

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

getClasses

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

getFields

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

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

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

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

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

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

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

getMethods

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

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

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

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

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

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

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

getConstructors

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

getField

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

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

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

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

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

getMethod

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

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

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

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

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

getConstructor

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

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

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

getDeclaredClasses

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

getDeclaredFields

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

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

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

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

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

getRecordComponents

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

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

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

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

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, представляющих все компоненты этого record-класса, либо null, если этот класс не является record-классом
См. Спецификацию языка Java:
8.10 Record-классы
С:
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 в базовом API отражения

getDeclaredConstructors

public Constructor<?>[] getDeclaredConstructors()
Возвращает массив объектов Constructor, отражающих все конструкторы, неявно или явно объявленные классом, представленным этим объектом Class. Это открытые, защищенные, имеющие доступ по умолчанию (на уровне пакета) и закрытые конструкторы. Элементы возвращаемого массива не отсортированы и не имеют определенного порядка. Если у класса есть конструктор по умолчанию (JLS 8.8.9), он включается в возвращаемый массив. Если у record-класса есть канонический конструктор (JLS 8.10.4.1, 8.10.4.2), он включается в возвращаемый массив. Этот метод возвращает массив длины 0, если этот объект 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 - если поле с указанным именем не найдено.
NullPointerException - если name имеет значение null
См. Спецификацию языка 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 - массив параметров
Возвращает:
объект Method для метода этого класса, соответствующего указанным имени и параметрам
Выбрасывает:
NoSuchMethodException - если соответствующий метод не найден.
NullPointerException - если name имеет значение null
См. Спецификацию языка Java:
8.2 Члены класса
8.4 Объявления методов
С:
1.1

getDeclaredConstructor

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

getResourceAsStream

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

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

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

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

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

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

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

getResource

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

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

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

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

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

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

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

getProtectionDomain

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

desiredAssertionStatus

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

isEnum

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

isRecord

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

Непосредственным суперклассом record-класса является java.lang.Record. Record-класс является финальным. У record-класса может быть ноль или более компонентов; getRecordComponents() возвращает ненулевое, но потенциально пустое значение для record-класса.

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

Возвращает:
true тогда и только тогда, когда этот класс является record-классом; в противном случае — false
См. Спецификацию языка Java:
8.10 Record-классы
С:
16

getEnumConstants

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

cast

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

asSubclass

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

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

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

getAnnotation

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

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

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

isAnnotationPresent

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

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

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

getAnnotationsByType

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

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

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

getAnnotations

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

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

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

getDeclaredAnnotation

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

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

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

getDeclaredAnnotationsByType

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

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

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

getDeclaredAnnotations

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

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

Определено в:
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 представляет класс или интерфейс, объявление которого явно не указывает аннотированные суперинтерфейсы, возвращается массив длины 0.

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

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

getNestHost

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

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

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

isNestmateOf

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

getNestMembers

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

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

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

descriptorString

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

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

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

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

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

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

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

componentType

public Class<?> componentType()
Возвращает тип компонента этого Class, если он описывает тип массива; в противном случае возвращает null.
Определено в:
componentType в интерфейсе TypeDescriptor.OfField<T>
Требования к реализации:
Эквивалентно getComponentType().
Возвращает:
объект 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, представляющих непосредственные подинтерфейсы или подклассы, которым разрешено расширять или реализовывать этот класс или интерфейс, если он является запечатанным. Порядок таких элементов не определен. Массив пуст, если у этого запечатанного класса или интерфейса нет разрешенных подклассов. Если этот объект Class представляет примитивный тип, void, тип массива или незапечатанный класс либо интерфейс, то есть isSealed() возвращает false, этот метод возвращает null. И наоборот, если isSealed() возвращает true, этот метод возвращает ненулевое значение. Для каждого класса или интерфейса C, записанного как разрешенный непосредственный подинтерфейс или подкласс этого класса или интерфейса, метод пытается получить объект Class для C (используя определяющий загрузчик классов текущего объекта Class). Объекты Class, которые удалось получить и которые являются непосредственными подинтерфейсами или подклассами этого класса или интерфейса, указываются элементами возвращаемого массива. Если объект Class получить не удается, он без уведомления пропускается и не включается в результирующий массив.
Возвращает:
массив объектов Class, представляющих разрешенные подклассы этого класса или интерфейса, или null, если этот класс или интерфейс не является запечатанным.
См. Спецификацию языка Java:
8.1 Объявления классов
9.1 Объявления интерфейсов
Начиная с версии:
17

isSealed

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Class.html

Spec-Zone.ru

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