Spec-Zone.ru › OpenJDK 25

Интерфейс 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()
Определяет, объявлен ли этот класс как enum.
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

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

compareTo

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

toString, 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

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

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()
Определяет, объявлен ли этот класс как enum.
Возвращает:
true, если этот класс объявлен как enum; в противном случае 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 доступна только для чтения; см. 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 следует отключить все EventRequest либо не вызывать 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 доступна только для чтения; см. 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 доступна только для чтения; см. 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, 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/jdk.jdi/com/sun/jdi/ClassType.html

Spec-Zone.ru

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