Интерфейс ClassType
- Все суперинтерфейсы:
Accessible, Comparable<ReferenceType>, Mirror, ReferenceType, Type
public interface ClassType extends ReferenceType
ReferenceType, применимым к классам в строгом смысле определения в JLS (не к интерфейсам и не к типам массивов). Любой ObjectReference, представляющий экземпляр такого класса, будет иметь тип ClassType.- Начиная с версии:
- 1.3
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
INVOKE_SINGLE_THREADED |
Выполнение вызова метода с возобновлением только вызывающего потока |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
List |
allInterfaces() |
Возвращает интерфейсы, реализованные этим классом напрямую и косвенно. |
Method |
concreteMethodByName |
Возвращает один неабстрактный Method, доступный из этого класса и имеющий заданные имя и сигнатуру. |
List |
interfaces() |
Возвращает интерфейсы, непосредственно реализованные этим классом. |
Value |
invokeMethod |
Вызывает указанный статический Method в целевой виртуальной машине. |
boolean |
isEnum() |
Определяет, объявлен ли этот класс как enum. |
ObjectReference |
newInstance |
Создает новый экземпляр этого типа с помощью заданного конструктора Method в целевой виртуальной машине. |
void |
setValue |
Присваивает значение статическому полю. |
List |
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
Подробное описание полей
INVOKE_SINGLE_THREADED
static final int INVOKE_SINGLE_THREADED
- См. также:
Подробное описание методов
superclass
ClassType superclass()
- Возвращает:
- объект
ClassType, представляющий суперкласс этого класса в целевой виртуальной машине. Если такого класса нет, возвращает null
interfaces
List<InterfaceType> interfaces()
- Возвращает:
- список объектов
InterfaceType, каждый из которых представляет непосредственный интерфейс этого ClassType в целевой виртуальной машине. Если таких интерфейсов нет, возвращает пустой список. - Вызывает исключение:
-
ClassNotPreparedException— если подготовка этого класса еще не выполнена.
allInterfaces
List<InterfaceType> allInterfaces()
interfaces(), также возвращаются все суперинтерфейсы.- Возвращает:
- список объектов
InterfaceType, каждый из которых представляет интерфейс этого ClassType в целевой виртуальной машине. Если таких интерфейсов нет, возвращает пустой список. - Вызывает исключение:
-
ClassNotPreparedException— если подготовка этого класса еще не выполнена.
subclasses
List<ClassType> subclasses()
- Возвращает:
- список объектов
ClassType, каждый из которых представляет загруженный подкласс этого класса в целевой виртуальной машине. Если таких классов нет, метод возвращает пустой список.
isEnum
boolean isEnum()
- Возвращает:
-
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— если методы еще недоступны, поскольку подготовка класса еще не выполнена. - См. также:
© 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