Spec-Zone.ru › OpenJDK 27

Интерфейс ClassType

Все суперинтерфейсы:
Accessible, Comparable<ReferenceType>, Mirror, ReferenceType, Type
public interface ClassType extends ReferenceType
Зеркальное представление класса в целевой виртуальной машине. ClassType — это уточнение ReferenceType, применимое к настоящим классам в смысле определения JLS (не к интерфейсу и не к типу массива). Любой ObjectReference, представляющий экземпляр такого класса, будет иметь ClassType в качестве типа.
Начиная с:
1.3
См. также:
  • ObjectReference

Краткое описание полей

Модификатор и тип Поле Описание
static final int INVOKE_SINGLE_THREADED
Выполняет вызов метода, возобновляя выполнение только вызывающего потока

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

Модификатор и тип Метод Описание
List<InterfaceType> allInterfaces()
Возвращает интерфейсы, прямо или косвенно реализованные этим классом.
Method concreteMethodByName(String name, String signature)
Возвращает один неабстрактный Method, видимый из этого класса и имеющий заданные имя и сигнатуру.
List<InterfaceType> interfaces()
Возвращает интерфейсы, непосредственно реализованные этим классом.
Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
Вызывает указанный статический Method в целевой виртуальной машине.
boolean isEnum()
Определяет, был ли этот класс объявлен перечислением.
ObjectReference newInstance(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
Создает новый экземпляр этого типа, используя указанный конструктор Method в целевой виртуальной машине.
void setValue(Field field, Value value)
Присваивает значение статическому полю.
List<ClassType> subclasses()
Возвращает непосредственно загруженные подклассы этого класса.
ClassType superclass()
Возвращает суперкласс этого класса.

Методы, объявленные в интерфейсе Accessible

isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
Модификатор и тип Метод Описание
boolean isPackagePrivate()
Определяет, представляет ли этот объект элемент с доступом на уровне пакета.
boolean isPrivate()
Определяет, представляет ли этот объект закрытый элемент.
boolean isProtected()
Определяет, представляет ли этот объект защищенный элемент.
boolean isPublic()
Определяет, представляет ли этот объект открытый элемент.
int modifiers()
Возвращает модификаторы языка программирования Java, закодированные целым числом.

Методы, объявленные в интерфейсе Comparable

compareTo
Модификатор и тип Метод Описание
int compareTo(ReferenceType o)
Сравнивает этот объект с указанным объектом, определяя их порядок.

Методы, объявленные в интерфейсе Mirror

toString, virtualMachine
Модификатор и тип Метод Описание
String toString()
Возвращает строку с описанием этого зеркального представления
VirtualMachine virtualMachine()
Возвращает VirtualMachine, к которой относится это зеркальное представление.

Методы, объявленные в интерфейсе ReferenceType

allFields, allLineLocations, allLineLocations, allMethods, availableStrata, classLoader, classObject, constantPool, constantPoolCount, defaultStratum, equals, failedToInitialize, fieldByName, fields, genericSignature, getValue, getValues, hashCode, instances, isAbstract, isFinal, isInitialized, isPrepared, isStatic, isVerified, locationsOfLine, locationsOfLine, majorVersion, methods, methodsByName, methodsByName, minorVersion, module, name, nestedTypes, sourceDebugExtension, sourceName, sourceNames, sourcePaths, visibleFields, visibleMethods
Модификатор и тип Метод Описание
List<Field> allFields()
Возвращает список, содержащий каждое Field, объявленное в этом типе, его суперклассах, реализованных интерфейсах и/или суперинтерфейсах.
List<Location> allLineLocations()
Возвращает список, содержащий объект Location для каждой исполняемой строки исходного кода в этом ссылочном типе.
List<Location> allLineLocations(String stratum, String sourceName)
Возвращает список, содержащий объект Location для каждой исполняемой строки исходного кода в этом ссылочном типе.
List<Method> allMethods()
Возвращает список, содержащий каждый Method, объявленный в этом типе, его суперклассах, реализованных интерфейсах и/или суперинтерфейсах.
List<String> availableStrata()
Возвращает доступные пласты для этого ссылочного типа.
ClassLoaderReference classLoader()
Возвращает объект загрузчика классов, загрузивший класс, соответствующий этому типу.
ClassObjectReference classObject()
Возвращает объект класса, соответствующий этому типу в целевой виртуальной машине.
byte[] constantPool()
Возвращает необработанные байты пула констант в формате элемента constant_pool формата файла класса, определенного в спецификации виртуальной машины Java.
int constantPoolCount()
Возвращает количество записей в пуле констант плюс один.
String defaultStratum()
Возвращает пласт по умолчанию для этого ссылочного типа.
boolean equals(Object obj)
Сравнивает указанный объект с этим ReferenceType на равенство.
boolean failedToInitialize()
Определяет, завершилась ли неудачей инициализация этого класса.
Field fieldByName(String fieldName)
Находит видимое Field с указанным однозначным именем.
List<Field> fields()
Возвращает список, содержащий каждое Field, объявленное в этом типе.
String genericSignature()
Возвращает обобщенную сигнатуру этого типа, если она существует.
Value getValue(Field field)
Возвращает Value заданного статического Field в этом типе.
Map<Field,Value> getValues(List<? extends Field> fields)
Возвращает карту, содержащую Value каждого статического Field из указанного списка.
int hashCode()
Возвращает хеш-код этого ObjectReference.
List<ObjectReference> instances(long maxInstances)
Возвращает экземпляры этого ReferenceType.
boolean isAbstract()
Определяет, был ли этот тип объявлен абстрактным.
boolean isFinal()
Определяет, был ли этот тип объявлен final.
boolean isInitialized()
Определяет, был ли этот тип инициализирован.
boolean isPrepared()
Определяет, был ли этот тип подготовлен.
boolean isStatic()
Определяет, был ли этот тип объявлен статическим.
boolean isVerified()
Определяет, был ли этот тип проверен.
List<Location> locationsOfLine(int lineNumber)
Возвращает список, содержащий все объекты Location, соответствующие указанному номеру строки.
List<Location> locationsOfLine(String stratum, String sourceName, int lineNumber)
Возвращает список, содержащий все объекты Location, соответствующие указанному номеру строки.
int majorVersion()
Возвращает старший номер версии класса, определенный в формате файла класса спецификации виртуальной машины Java.
List<Method> methods()
Возвращает список, содержащий каждый Method, непосредственно объявленный в этом типе.
List<Method> methodsByName(String name)
Возвращает список, содержащий каждый видимый Method с указанным именем.
List<Method> methodsByName(String name, String signature)
Возвращает список, содержащий каждый видимый Method с указанными именем и сигнатурой.
int minorVersion()
Возвращает младший номер версии класса, определенный в формате файла класса спецификации виртуальной машины Java.
default ModuleReference module()
Возвращает объект модуля, содержащего класс, соответствующий этому типу.
String name()
Возвращает имя этого объекта ReferenceType.
List<ReferenceType> nestedTypes()
Возвращает список объектов ReferenceType, объявленных внутри этого типа и в данный момент загруженных в виртуальную машину.
String sourceDebugExtension()
Возвращает отладочное расширение исходного кода этого типа.
String sourceName()
Возвращает идентифицирующее имя исходного файла, соответствующего объявлению этого типа.
List<String> sourceNames(String stratum)
Возвращает идентифицирующие имена всех исходных файлов, соответствующих объявлению этого типа.
List<String> sourcePaths(String stratum)
Возвращает пути к исходным файлам, соответствующим объявлению этого типа.
List<Field> visibleFields()
Возвращает список, содержащий каждое не скрытое и однозначное Field в этом типе.
List<Method> visibleMethods()
Возвращает список, содержащий каждый Method, объявленный в этом типе или унаследованный им.

Методы, объявленные в интерфейсе Type

signature
Модификатор и тип Метод Описание
String signature()
Возвращает сигнатуру этого типа.

Подробное описание полей

INVOKE_SINGLE_THREADED

static final int INVOKE_SINGLE_THREADED
Выполняет вызов метода, возобновляя только вызывающий поток
См. также:
  • Значения константных полей

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

superclass

ClassType superclass()
Возвращает суперкласс этого класса.
Возвращает:
объект ClassType, представляющий суперкласс этого класса в целевой виртуальной машине. Если такого класса нет, возвращает null

interfaces

List<InterfaceType> interfaces()
Возвращает интерфейсы, непосредственно реализуемые этим классом. Включаются только интерфейсы, объявленные в этом классе с помощью ключевого слова "implements".
Возвращает:
список объектов InterfaceType, каждый из которых представляет один из интерфейсов, непосредственно реализуемых этим ClassType в целевой виртуальной машине. Если таких интерфейсов нет, возвращает пустой список.
Выбрасывает:
ClassNotPreparedException — если этот класс ещё не подготовлен.

allInterfaces

List<InterfaceType> allInterfaces()
Возвращает интерфейсы, непосредственно и косвенно реализуемые этим классом. Интерфейсы, возвращённые методом interfaces(), а также все суперинтерфейсы также включаются в результат.
Возвращает:
список объектов InterfaceType, каждый из которых представляет интерфейс этого ClassType в целевой виртуальной машине. Если таких интерфейсов нет, возвращает пустой список.
Выбрасывает:
ClassNotPreparedException — если этот класс ещё не подготовлен.

subclasses

List<ClassType> subclasses()
Возвращает непосредственно наследующие от этого класса подклассы, загруженные на данный момент. Порядок элементов в списке не гарантируется.
Возвращает:
список объектов ClassType, каждый из которых представляет загруженный подкласс этого класса в целевой виртуальной машине. Если таких классов нет, этот метод возвращает пустой список.

isEnum

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

setValue

void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
Присваивает значение статическому полю. Поле Field должно быть допустимым для этого ClassType; то есть оно должно принадлежать зеркальному объекту-классу или его суперклассу. Поле не должно быть final.

Значения объектов должны быть совместимы по присваиванию с типом поля (это подразумевает, что тип поля должен быть загружен загрузчиком классов охватывающего класса). Примитивные значения должны быть либо совместимы по присваиванию с типом поля, либо преобразуемы к типу поля без потери информации. Дополнительные сведения о совместимости по присваиванию см. в разделе 5.2 JLS.

Параметры:
field — поле, которому нужно присвоить значение.
value — присваиваемое значение.
Выбрасывает:
IllegalArgumentException — если поле не является статическим, поле является final или поле не существует в этом классе.
ClassNotLoadedException — если тип поля ещё не загружен соответствующим загрузчиком классов.
InvalidTypeException — если тип значения не соответствует объявленному типу поля.
VMCannotBeModifiedException — если виртуальная машина доступна только для чтения; см. VirtualMachine.canBeModified().

invokeMethod

Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Вызывает указанный статический Method в целевой виртуальной машине. Указанный метод может быть определён в этом классе или в суперклассе. Метод должен быть статическим, но не статическим инициализатором. Чтобы создать новый объект и выполнить его конструктор, используйте newInstance(ThreadReference, Method, List, int).

Вызов метода выполняется в указанном потоке. Вызов метода возможен, только если указанный поток был приостановлен событием, произошедшим в этом потоке. Вызов метода не поддерживается, если целевая виртуальная машина была приостановлена с помощью VirtualMachine.suspend() или если указанный поток был приостановлен с помощью ThreadReference.suspend().

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

Аргументы-объекты должны быть совместимы по присваиванию с типом аргумента (это подразумевает, что тип аргумента должен быть загружен загрузчиком классов охватывающего класса). Примитивные аргументы должны быть либо совместимы по присваиванию с типом аргумента, либо преобразуемы к типу аргумента без потери информации. Если вызываемый метод принимает переменное число аргументов, тип последнего аргумента является массивом некоторого компонентного типа. Соответствующий аргумент можно опустить, передать как null, передать как массив того же компонентного типа или передать аргумент компонентного типа с любым количеством других аргументов того же типа. Если аргумент опущен, передаётся массив компонентного типа нулевой длины. Компонентный тип может быть примитивным. Автоупаковка не поддерживается. Дополнительные сведения о совместимости по присваиванию см. в разделе 5.2 Спецификации языка Java.

По умолчанию во время вызова метода возобновляется выполнение всех потоков целевой виртуальной машины, если до этого они были приостановлены событием, с помощью VirtualMachine.suspend() или ThreadReference.suspend(). Это предотвращает взаимоблокировки, которые могут возникнуть, если какие-либо потоки владеют ресурсами, например мониторами, необходимыми вызываемому методу. Однако обратите внимание: это неявное возобновление действует точно так же, как ThreadReference.resume(), поэтому, если счётчик приостановки потока больше 1, поток останется приостановленным во время вызова, и взаимоблокировка всё ещё может возникнуть. По умолчанию после завершения вызова все потоки целевой виртуальной машины приостанавливаются независимо от их состояния до вызова. Во время вызова могут произойти точки останова или другие события. Это может привести к описанным выше взаимоблокировкам. Взаимоблокировка также может возникнуть, если invokeMethod вызван из потока обработчика событий клиента. В этом случае данный поток будет ожидать завершения invokeMethod и не будет считывать EventSet, поступивший для нового события. Если для этого нового EventSet задано значение SUSPEND_ALL, возникнет взаимоблокировка, поскольку никто не возобновит EventSet. Чтобы избежать этого, перед вызовом invokeMethod следует отключить все EventRequests либо не вызывать invokeMethod из потока обработчика событий клиента.

Возобновление других потоков во время вызова можно предотвратить, указав битовый флаг INVOKE_SINGLE_THREADED в аргументе options; однако защиты от описанных выше взаимоблокировок и способов их устранения нет, поэтому использовать этот параметр следует с большой осторожностью. Возобновится только указанный поток (как описано выше для всех потоков). После завершения вызова в однопоточном режиме вызывающий поток снова приостанавливается. Обратите внимание, что потоки, запущенные во время однопоточного вызова, не будут приостановлены после его завершения.

Если во время вызова соединение с целевой виртуальной машиной будет разорвано (например, посредством VirtualMachine.dispose()), вызов метода продолжится.

Примечание к API:
Виртуальные потоки обычно являются потоками пользовательского режима, планируемыми средой выполнения Java, а не операционной системой. Поэтому при использовании виртуальных потоков может возникнуть больше ситуаций, в которых параметр INVOKE_SINGLE_THREADED приведёт к взаимоблокировке. Например, приостановка всех потоков целевой виртуальной машины может приостановить потоки, поддерживающие механизм таймера виртуальных потоков, и поэтому такие методы, как Thread.sleep(long), могут привести к взаимоблокировке.
Параметры:
thread — поток, в котором нужно выполнить вызов.
method — вызываемый Method.
arguments — список аргументов типа Value, передаваемых вызываемому методу. Значения из списка назначаются аргументам в порядке их следования в сигнатуре метода.
options — целочисленные параметры, задаваемые битовыми флагами.
Возвращает:
зеркало типа Value, представляющее возвращаемое значение вызванного метода.
Выбрасывает:
IllegalArgumentException — если метод не является членом этого класса или суперкласса, если размер списка аргументов не совпадает с количеством объявленных аргументов метода или если метод является инициализатором, конструктором или статическим инициализатором.
ClassNotLoadedException — если тип какого-либо аргумента ещё не загружен соответствующим загрузчиком классов.
IncompatibleThreadStateException — если указанный поток не был приостановлен событием.
InvocationException — если вызов метода привёл к исключению в целевой виртуальной машине.
InvalidTypeException — если аргументы не удовлетворяют следующему требованию: аргументы-объекты должны быть совместимы по присваиванию с типом аргумента. Это подразумевает, что тип аргумента должен быть загружен загрузчиком классов охватывающего класса. Примитивные аргументы должны быть либо совместимы по присваиванию с типом аргумента, либо преобразуемы к типу аргумента без потери информации. Дополнительные сведения о совместимости по присваиванию см. в разделе 5.2 JLS.
VMCannotBeModifiedException — если виртуальная машина доступна только для чтения; см. VirtualMachine.canBeModified().

newInstance

ObjectReference newInstance(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Создаёт новый экземпляр этого типа с помощью указанного конструктора Method в целевой виртуальной машине. Указанный конструктор должен быть определён в этом классе.

Создание экземпляра выполняется в указанном потоке. Создание экземпляра возможно, только если указанный поток был приостановлен событием, произошедшим в этом потоке. Создание экземпляра не поддерживается, если целевая виртуальная машина была приостановлена с помощью VirtualMachine.suspend() или если указанный поток был приостановлен с помощью ThreadReference.suspend().

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

Аргументы-объекты должны быть совместимы по присваиванию с типом аргумента (это подразумевает, что тип аргумента должен быть загружен загрузчиком классов охватывающего класса). Примитивные аргументы должны быть либо совместимы по присваиванию с типом аргумента, либо преобразуемы к типу аргумента без потери информации. Если вызываемый метод принимает переменное число аргументов, тип последнего аргумента является массивом некоторого компонентного типа. Соответствующий аргумент можно опустить, передать как null, передать как массив того же компонентного типа или передать аргумент компонентного типа с любым количеством других аргументов того же типа. Если аргумент опущен, передаётся массив компонентного типа нулевой длины. Компонентный тип может быть примитивным. Автоупаковка не поддерживается. Дополнительные сведения о совместимости по присваиванию см. в разделе 5.2 Спецификации языка Java.

По умолчанию во время вызова метода возобновляется выполнение всех потоков целевой виртуальной машины, если до этого они были приостановлены событием, с помощью VirtualMachine.suspend() или ThreadReference.suspend(). Это предотвращает взаимоблокировки, которые могут возникнуть, если какие-либо потоки владеют ресурсами, например мониторами, необходимыми вызываемому методу. Во время вызова могут произойти точки останова или другие события. Однако обратите внимание: это неявное возобновление действует точно так же, как ThreadReference.resume(), поэтому, если счётчик приостановки потока больше 1, поток останется приостановленным во время вызова. По умолчанию после завершения вызова все потоки целевой виртуальной машины приостанавливаются независимо от их состояния до вызова.

Возобновление других потоков во время вызова можно предотвратить, указав битовый флаг INVOKE_SINGLE_THREADED в аргументе options; однако защиты от описанных выше взаимоблокировок и способов их устранения нет, поэтому использовать этот параметр следует с большой осторожностью. Возобновится только указанный поток (как описано выше для всех потоков). После завершения вызова в однопоточном режиме вызывающий поток снова приостанавливается. Обратите внимание, что потоки, запущенные во время однопоточного вызова, не будут приостановлены после его завершения.

Если во время вызова соединение с целевой виртуальной машиной будет разорвано (например, посредством VirtualMachine.dispose()), вызов метода продолжится.

Примечание к API:
Виртуальные потоки обычно являются потоками пользовательского режима, планируемыми средой выполнения Java, а не операционной системой. Поэтому при использовании виртуальных потоков может возникнуть больше ситуаций, в которых параметр INVOKE_SINGLE_THREADED приведёт к взаимоблокировке. Например, приостановка всех потоков целевой виртуальной машины может приостановить потоки, поддерживающие механизм таймера виртуальных потоков, и поэтому такие методы, как Thread.sleep(long), могут привести к взаимоблокировке.
Параметры:
thread — поток, в котором нужно выполнить вызов.
method — вызываемый конструктор Method.
arguments — список аргументов типа Value, передаваемых вызываемому конструктору. Значения из списка назначаются аргументам в порядке их следования в сигнатуре конструктора.
options — целочисленные параметры, задаваемые битовыми флагами.
Возвращает:
зеркало типа ObjectReference, представляющее вновь созданный объект.
Выбрасывает:
IllegalArgumentException — если метод не является членом этого класса, если размер списка аргументов не совпадает с количеством объявленных аргументов конструктора или если метод не является конструктором.
ClassNotLoadedException — если тип какого-либо аргумента ещё не загружен соответствующим загрузчиком классов.
IncompatibleThreadStateException — если указанный поток не был приостановлен событием.
InvocationException — если вызов метода привёл к исключению в целевой виртуальной машине.
InvalidTypeException — если аргументы не удовлетворяют следующему требованию: аргументы-объекты должны быть совместимы по присваиванию с типом аргумента. Это подразумевает, что тип аргумента должен быть загружен загрузчиком классов охватывающего класса. Примитивные аргументы должны быть либо совместимы по присваиванию с типом аргумента, либо преобразуемы к типу аргумента без потери информации. Дополнительные сведения о совместимости по присваиванию см. в разделе 5.2 JLS.
VMCannotBeModifiedException — если виртуальная машина доступна только для чтения; см. VirtualMachine.canBeModified().

concreteMethodByName

Method concreteMethodByName(String name, String signature)
Возвращает один неабстрактный Method, видимый из этого класса и имеющий указанное имя и сигнатуру. Сведения о формате сигнатуры см. в разделе ReferenceType.methodsByName(java.lang.String, java.lang.String).

Возвращённый метод (если он не равен null) является компонентом ClassType.

Параметры:
name — имя искомого метода.
signature — сигнатура искомого метода
Возвращает:
Method, соответствующий указанным имени и сигнатуре, или null, если совпадение не найдено.
Выбрасывает:
ClassNotPreparedException — если методы ещё недоступны, поскольку класс ещё не подготовлен.
См. также:
  • ReferenceType.visibleMethods()
  • ReferenceType.methodsByName(java.lang.String name)
  • ReferenceType.methodsByName(java.lang.String name, java.lang.String signature)

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

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

Spec-Zone.ru

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