Класс DynAnyHelper
- java.lang.Object
-
- org.omg.DynamicAny.DynAnyHelper
public abstract class DynAnyHelper extends Object
Значения любого типа могут быть динамически интерпретированы (обработаны) и построены с помощью объектов DynAny. Объект DynAny связан со значением данных, которое соответствует копии значения, вставленного в any.
Объект DynAny можно рассматривать как упорядоченное множество компонентных объектов DynAny. Для объектов DynAny, представляющих базовый тип, такой как long, или тип без компонентов, например, пустое исключение, упорядоченное множество компонентов пусто. Каждый объект DynAny сохраняет понятие текущей позиции в своём множестве компонентных объектов DynAny. Текущая позиция определяется значением индекса, которое изменяется от 0 до n-1, где n — количество компонентов. Специальное значение индекса -1 указывает текущую позицию, не указывающую на конкретный элемент. Для значений, которые не могут иметь текущую позицию (например, для пустого исключения), значение индекса фиксируется на -1. Если объект DynAny инициализирован значением с компонентами, индекс инициализируется значением 0. После создания неинициализированного объекта DynAny (то есть объекта DynAny, не имеющего значения, но имеющего TypeCode, допускающего компоненты), текущая позиция зависит от типа значения, представленного объектом DynAny. (Текущая позиция устанавливается в 0 или -1 в зависимости от того, получает ли новый объект DynAny значения по умолчанию для своих компонентов.)
Операции итерации rewind, seek и next могут использоваться для изменения текущей позиции, а операция current_component возвращает компонент в текущей позиции. Операция component_count возвращает количество компонентов объекта DynAny. В совокупности эти операции позволяют итерироваться по компонентам объекта DynAny, например, для (рекурсивного) изучения его содержимого.
Построенный объект DynAny — это объект DynAny, связанный со построенным типом. Для каждого типа, построенного в IDL (fixed, enum, struct, sequence, union, array, exception и value type), существует отдельный интерфейс, наследующий от интерфейса DynAny.
Объект построенного объекта DynAny экспортирует операции, которые позволяют создавать новые объекты DynAny, каждый из которых связан с компонентом построенного значения данных. Например, DynStruct связан со значением типа struct. Это означает, что DynStruct можно рассматривать как обладающий упорядоченным множеством компонентов, по одному для каждого члена структуры. Объект DynStruct экспортирует операции, позволяющие создавать новые объекты DynAny, каждый из которых связан с членом структуры.
Если объект DynAny был получен из другого (построенного) объекта DynAny, например, объекта DynAny, представляющего член структуры, который был создан из DynStruct, то член DynAny логически содержится в DynStruct. Вызов операции insert или get не изменяет текущую позицию. Уничтожение объекта DynAny верхнего уровня (объекта, который не был получен в качестве компонента другого объекта DynAny) также уничтожает все объекты компонентных объектов DynAny, полученных из него. Уничтожение объекта DynAny не являющегося объектом верхнего уровня, ничего не делает. Вызов операций на уничтоженном объекте DynAny верхнего уровня или любом из его потомков вызывает исключение OBJECT_NOT_EXIST. Если программист хочет уничтожить объект DynAny, но всё ещё хочет управлять некоторыми компонентами значения данных, связанных с ним, то он или она должны сначала создать объект DynAny для компонента и после этого сделать копию созданного объекта DynAny.
Поведение объектов DynAny было определено для обеспечения эффективной реализации с точки зрения выделенной памяти и скорости доступа. Объекты DynAny предназначены для использования для обхода значений, извлеченных из any, или для построения значений any во время выполнения. Их использование для других целей не рекомендуется.
Операции insert и get необходимы для работы с базовыми объектами DynAny, но также полезны для работы со построенными объектами DynAny. Вставка значения базового типа данных в построенный объект DynAny подразумевает инициализацию текущего компонента построенного значения данных, связанного с объектом DynAny. Например, вызов insert_boolean на DynStruct подразумевает вставку значения данных типа boolean в текущую позицию связанного значения данных типа struct. Тип совместим для вставки или извлечения значения, если его TypeCode эквивалентен TypeCode, содержащемуся в DynAny, или, если DynAny имеет компоненты, эквивалентен TypeCode объекта DynAny в текущей позиции.
Объекты DynAny и DynAnyFactory предназначены для использования в процессе, в котором они созданы и используются. Это означает, что ссылки на объекты DynAny и DynAnyFactory не могут быть экспортированы в другие процессы или внешними объектами с ORB.object_to_string(). Если любая попытка сделать это предпринята, нарушающая операция вызовет системное исключение MARSHAL. Поскольку их интерфейсы определены в IDL, объекты DynAny экспортируют операции, определённые в стандартном интерфейсе org.omg.CORBA.Object. Однако любая попытка вызвать операции, экспортированные через интерфейс Object, может вызвать стандартное исключение NO_IMPLEMENT. Попытка использовать объект DynAny с DII может вызвать исключение NO_IMPLEMENT.
Конструкторы
| Конструктор и описание |
|---|
DynAnyHelper() |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
static DynAny |
extract(Any a) |
static String |
id() |
static void |
insert(Any a,
DynAny that) |
static DynAny |
narrow(Object obj) |
static DynAny |
read(InputStream istream) |
static TypeCode |
type() |
static DynAny |
unchecked_narrow(Object obj) |
static void |
write(OutputStream ostream,
DynAny value) |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
DynAnyHelper
public DynAnyHelper()
Методы
insert
public static void insert(Any a,
DynAny that) extract
public static DynAny extract(Any a)
type
public static TypeCode type()
id
public static String id()
read
public static DynAny read(InputStream istream)
write
public static void write(OutputStream ostream,
DynAny value) narrow
public static DynAny narrow(Object obj)
unchecked_narrow
public static DynAny unchecked_narrow(Object obj)
© 1993, 2020, 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.