Интерфейс 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() |
Определяет, был ли этот класс объявлен перечислением. |
ObjectReference |
newInstance |
Создает новый экземпляр этого типа, используя указанный конструктор Method в целевой виртуальной машине. |
void |
setValue |
Присваивает значение статическому полю. |
List |
subclasses() |
Возвращает непосредственно загруженные подклассы этого класса. |
ClassType |
superclass() |
Возвращает суперкласс этого класса. |
Методы, объявленные в интерфейсе Accessible
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
isPackagePrivate() |
Определяет, представляет ли этот объект элемент с доступом на уровне пакета. |
boolean |
isPrivate() |
Определяет, представляет ли этот объект закрытый элемент. |
boolean |
isProtected() |
Определяет, представляет ли этот объект защищенный элемент. |
boolean |
isPublic() |
Определяет, представляет ли этот объект открытый элемент. |
int |
modifiers() |
Возвращает модификаторы языка программирования Java, закодированные целым числом. |
Методы, объявленные в интерфейсе Comparable
compareTo | Модификатор и тип | Метод | Описание |
|---|---|---|
int |
compareTo |
Сравнивает этот объект с указанным объектом, определяя их порядок. |
Методы, объявленные в интерфейсе 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 |
allFields() |
Возвращает список, содержащий каждое Field, объявленное в этом типе, его суперклассах, реализованных интерфейсах и/или суперинтерфейсах. |
List |
allLineLocations() |
Возвращает список, содержащий объект Location для каждой исполняемой строки исходного кода в этом ссылочном типе. |
List |
allLineLocations |
Возвращает список, содержащий объект Location для каждой исполняемой строки исходного кода в этом ссылочном типе. |
List |
allMethods() |
Возвращает список, содержащий каждый Method, объявленный в этом типе, его суперклассах, реализованных интерфейсах и/или суперинтерфейсах. |
List |
availableStrata() |
Возвращает доступные пласты для этого ссылочного типа. |
ClassLoaderReference |
classLoader() |
Возвращает объект загрузчика классов, загрузивший класс, соответствующий этому типу. |
ClassObjectReference |
classObject() |
Возвращает объект класса, соответствующий этому типу в целевой виртуальной машине. |
byte[] |
constantPool() |
Возвращает необработанные байты пула констант в формате элемента constant_pool формата файла класса, определенного в спецификации виртуальной машины Java. |
int |
constantPoolCount() |
Возвращает количество записей в пуле констант плюс один. |
String |
defaultStratum() |
Возвращает пласт по умолчанию для этого ссылочного типа. |
boolean |
equals |
Сравнивает указанный объект с этим ReferenceType на равенство. |
boolean |
failedToInitialize() |
Определяет, завершилась ли неудачей инициализация этого класса. |
Field |
fieldByName |
Находит видимое Field с указанным однозначным именем. |
List |
fields() |
Возвращает список, содержащий каждое Field, объявленное в этом типе. |
String |
genericSignature() |
Возвращает обобщенную сигнатуру этого типа, если она существует. |
Value |
getValue |
|
Map |
getValues |
|
int |
hashCode() |
Возвращает хеш-код этого ObjectReference. |
List |
instances |
Возвращает экземпляры этого ReferenceType. |
boolean |
isAbstract() |
Определяет, был ли этот тип объявлен абстрактным. |
boolean |
isFinal() |
Определяет, был ли этот тип объявлен final. |
boolean |
isInitialized() |
Определяет, был ли этот тип инициализирован. |
boolean |
isPrepared() |
Определяет, был ли этот тип подготовлен. |
boolean |
isStatic() |
Определяет, был ли этот тип объявлен статическим. |
boolean |
isVerified() |
Определяет, был ли этот тип проверен. |
List |
locationsOfLine |
Возвращает список, содержащий все объекты Location, соответствующие указанному номеру строки. |
List |
locationsOfLine |
Возвращает список, содержащий все объекты Location, соответствующие указанному номеру строки. |
int |
majorVersion() |
Возвращает старший номер версии класса, определенный в формате файла класса спецификации виртуальной машины Java. |
List |
methods() |
Возвращает список, содержащий каждый Method, непосредственно объявленный в этом типе. |
List |
methodsByName |
Возвращает список, содержащий каждый видимый Method с указанным именем. |
List |
methodsByName |
Возвращает список, содержащий каждый видимый Method с указанными именем и сигнатурой. |
int |
minorVersion() |
Возвращает младший номер версии класса, определенный в формате файла класса спецификации виртуальной машины Java. |
default ModuleReference |
module() |
Возвращает объект модуля, содержащего класс, соответствующий этому типу. |
String |
name() |
Возвращает имя этого объекта ReferenceType. |
List |
nestedTypes() |
Возвращает список объектов ReferenceType, объявленных внутри этого типа и в данный момент загруженных в виртуальную машину. |
String |
sourceDebugExtension() |
Возвращает отладочное расширение исходного кода этого типа. |
String |
sourceName() |
Возвращает идентифицирующее имя исходного файла, соответствующего объявлению этого типа. |
List |
sourceNames |
Возвращает идентифицирующие имена всех исходных файлов, соответствующих объявлению этого типа. |
List |
sourcePaths |
Возвращает пути к исходным файлам, соответствующим объявлению этого типа. |
List |
visibleFields() |
Возвращает список, содержащий каждое не скрытое и однозначное Field в этом типе. |
List |
visibleMethods() |
Возвращает список, содержащий каждый Method, объявленный в этом типе или унаследованный им. |
Подробное описание полей
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, если этот класс был объявлен как перечисление; в противном случае — 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— если методы ещё недоступны, поскольку класс ещё не подготовлен. - См. также:
© 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.