org.omg.CORBA

接口
异常
java.lang.Object
  继承者 org.omg.CORBA.TypeCode
所有已实现的接口:
Serializable, IDLEntity

public abstract class TypeCode
     
extends Object
implements IDLEntity

用于有关特定 CORBA 数据类型的信息的容器。

TypeCode 对象的作用包括:

  • 在动态调用接口 (Dynamic Invocation Interface) 中,用于指示实际参数的类型或返回值的类型。
    NamedValue 对象用于表示参数和返回值。其中有一个组件是 Any 对象,该 Any 对象又有一个 TypeCode 对象作为其组件之一。
  • 由接口存储库 (Interface Repository) 用来表示作为许多 OMG IDL 声明一部分的类型说明。

TypeCode 对象的表示形式是不透明的,从理论上说,TypeCode 对象由以下内容组成:

  • 一个 kind 字段,它被设置为 TCKind 类的一个实例
  • 0 个或多个适用于特定种类的附加字段。例如,描述 OMG IDL 类型 1ongTypeCode 对象所具有的种类为 TCKind.tk_long,没有附加字段。描述 OMG IDL 类型 sequence<boolean, 10>TypeCode 具有一个值为 TCKind.tk_sequencekind 字段,以及值为 boolean10(用于序列元素的类型和序列的长度)的字段。

可以通过以下各种方式获得 TypeCode 对象:
  1. 通过调用 Any.insert_X 方法,其中 X 为基本 IDL 类型。此方法为类型 X 创建 TypeCode 对象,并将其分配给 Any 对象的 type 字段。
  2. 通过调用 ORB 类中的方法

    例如,以下代码为 string(最长为 30 个字符)创建 TypeCode

       org.omg.CORBA.TypeCode tcString = orb.create_string_tc(30);
     

    以下代码为由五个 string 组成的 array 创建 TypeCode 对象:

       org.omg.CORBA.TypeCode tcArray = orb.create_array_tc(
                                           5, TCKind.tk_string);
     

    以下代码为名为 "Account" 的接口创建 TypeCode 对象:

       org.omg.CORBA.TypeCode tcInterface = orb.create_interface_tc(
                                                     "thisId", "Account");
     
  3. 作为用于用户定义 IDL 类型的 Holder 类中 _type 方法的返回值。这些 Holder 类由 idltojava 编译器生成。
  4. 从 CORBA 接口存储库中获取

TypeCode 类中的大多数方法都是访问方法,包含在 TypeCode 对象中的信息是特定于特定类型的。所以,必须只在所应用类型代码的种类上调用这些方法。如果访问方法试图从不适当类型代码种类中访问信息,则将抛出异常 TypeCodePackage.BadKind。例如,如果在 union 以外的其他种类上调用 discriminator_type 方法,则将抛出 BadKind 异常,因为只有 union 具有鉴别符 (discriminator)。以下列表展示将哪些方法应用到哪些类型代码种类:

以下方法可以在所有 TypeCode 种类上调用:

  • equal
  • kind

以下方法可以在 objrefstructunionenumaliasexceptionvaluevalue_boxnativeabstract_interface 上调用:

  • id
  • name

以下方法可以在 structunionenumexception 上调用:

  • member_count
  • member_name

以下方法可以在 structunionexception 上调用:

  • member_type(int index)

以下方法可以在 union 上调用:

  • member_label
  • discriminator_type
  • default_index

以下方法可以在 stringsequencearray 上调用:

  • length

以下方法可以在 aliassequencearrayvalue_box 上调用:

  • content_type

与其他 CORBA 伪对象不同,TypeCode 对象可以作为一般 IDL 参数传递。

不推荐使用 parameterparam_count 方法,所以未映射。

Java IDL 扩展了 CORBA 规范,以允许能在 struct TypeCode 上执行的所有操作同样能在 exception TypeCode 上执行。


构造方法摘要
TypeCode()
           
 
方法摘要
abstract  TypeCode concrete_base_type()
          返回一个 TypeCode 对象,它描述此 TypeCode 对象所描述 value 类型的具体基本类型。
abstract  TypeCode content_type()
          返回表示此 TypeCode 对象所描述成员 IDL 类型的 TypeCode 对象。
abstract  int default_index()
          返回默认成员的索引,如果没有默认成员,则返回 -1。
abstract  TypeCode discriminator_type()
          返回描述所有非默认成员标签的 TypeCode 对象。
abstract  boolean equal(TypeCode tc)
          将此 TypeCode 对象与给定对象比较,测试它们是否相等。
abstract  boolean equivalent(TypeCode tc)
          测试给定 TypeCode 对象是否等于此 TypeCode 对象。
abstract  short fixed_digits()
          返回此 TypeCode 对象所描述的 fixed 类型中数字的数量。
abstract  short fixed_scale()
          返回此 TypeCode 对象所描述的 fixed 类型的标度。
abstract  TypeCode get_compact_typecode()
          剔除所有可选名称和成员名称字段,但使所有别名 typecode 保留原样。
abstract  String id()
          检索全局标识此 TypeCode 对象类型的 RepositoryId。
abstract  TCKind kind()
          检索此 TypeCode 对象的种类。
abstract  int length()
          返回此 TypeCode 对象所描述类型中的成员数。
abstract  int member_count()
          检索此 TypeCode 对象所描述类型中的成员数。
abstract  Any member_label(int index)
          检索给定索引标识的 union 成员的标签。
abstract  String member_name(int index)
          检索给定索引标识的成员的简单名称。
abstract  TypeCode member_type(int index)
          检索一个 TypeCode 对象,它描述给定索引所标识成员的类型。
abstract  short member_visibility(int index)
          返回一个常量,它指示位于给定索引处的成员的可见性。
abstract  String name()
          在 TypeCode 对象的封闭作用域内检索标识此对象的简单名称。
abstract  short type_modifier()
          返回一个常量,它指示此 TypeCode 对象所描述的 value 类型的修饰符。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

TypeCode

public TypeCode()
方法详细信息

equal

public abstract boolean equal(TypeCode tc)
将此 TypeCode 对象与给定对象比较,测试它们是否相等。如果两个 TypeCode 对象可以互换并在对它们应用 TypeCode 操作时返回相同的结果,则这两个对象相等。

参数:
tc - 要与之比较的 TypeCode 对象
返回:
如果类型代码相同,则返回 true;否则返回 false

equivalent

public abstract boolean equivalent(TypeCode tc)
测试给定 TypeCode 对象是否等于此 TypeCode 对象。

参数:
tc - 将与此 typecode 比较的 typecode
返回:
如果给定 typecode 等于此 typecode,则返回 true;否则返回 false

get_compact_typecode

public abstract TypeCode get_compact_typecode()
剔除所有可选名称和成员名称字段,但使所有别名 typecode 保留原样。

返回:
一个 TypeCode 对象,已剔除可选名称和成员名称字段,但别名 typecode 保持不变
另请参见:
CORBA 包中有关未实现特性的注释

kind

public abstract TCKind kind()
检索此 TypeCode 对象的种类。代码类型的种类可确定哪些 TypeCode 方法可以合法地在该种类之上进行调用。

kind 方法可以在任何 TypeCode 对象上调用。

返回:
指示此 TypeCode 对象 kind 字段值的 TCKind 实例

id

public abstract String id()
                   throws BadKind
检索全局标识此 TypeCode 对象类型的 RepositoryId。

id 方法可以在 object reference、structure、union、enumeration、alias、exception、valuetype、boxed valuetype、native 和 abstract interface 类型代码上调用。object reference、exception、valuetype、boxed valuetype、native 和 abstract interface TypeCode 对象总是有一个 RepositoryId。从接口存储库 (Interface Repository) 或方法 ORB.create_operation_list 中获得的 structure、union、enumeration 和 alias TypeCode 对象也总是有一个 RepositoryId。如果没有 RepositoryId,则该方法可以返回一个空字符串。

返回:
TypeCode 对象的 RepositoryId,如果没有 RepositoryID,则返回一个空字符串
抛出:
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

name

public abstract String name()
                     throws BadKind
TypeCode 对象的封闭作用域内检索标识此对象的简单名称。因为这些名称对于 Repository 而言是本地的,所以从 TypeCode 对象返回的名称可能与任何特定 Repository 中的类型名称不匹配,甚至可能是一个空字符串。

name 方法可以在 object reference、structure、union、enumeration、alias、exception、valuetype、boxed valuetype、native 和 abstract interface TypeCode 对象上调用。

返回:
标识此 TypeCode 对象的名称或一个空字符串
抛出:
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

member_count

public abstract int member_count()
                          throws BadKind
检索此 TypeCode 对象所描述类型中的成员数。

member_count 方法可以在 structure、union 和 enumeration TypeCode 对象上调用。Java IDL 扩展了 CORBA 规范,允许此方法在异常上进行操作。

返回:
组成此 TypeCode 对象所描述类型的成员数
抛出:
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

member_name

public abstract String member_name(int index)
                            throws BadKind,
                                   Bounds
检索给定索引标识的成员的简单名称。因为这些名称对于 Repository 而言是本地的,所以从 TypeCode 对象返回的名称可能与任何特定 Repository 中的成员名称不匹配,甚至可能是一个空字符串。

可以在 structure、union 和 enumeration TypeCode 对象上调用 member_name 方法。Java IDL 扩展了 CORBA 规范,允许此方法在异常上进行操作。

参数:
index - 请求名称的成员的索引
返回:
由索引标识的成员的简单名称,或者空字符串
抛出:
Bounds - 如果索引大于等于组成该类型的成员数
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

member_type

public abstract TypeCode member_type(int index)
                              throws BadKind,
                                     Bounds
检索一个 TypeCode 对象,它描述给定索引所标识成员的类型。

member_type 方法可以在 structure 和 union TypeCode 对象上调用。Java IDL 扩展了 CORBA 规范,允许此方法在异常上进行操作。

参数:
index - 开始请求类型信息的成员的索引
返回:
描述给定索引处成员的 TypeCode 对象
抛出:
Bounds - 如果索引大于等于组成该类型的成员数
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

member_label

public abstract Any member_label(int index)
                          throws BadKind,
                                 Bounds
检索给定索引标识的 union 成员的标签。对于默认成员,该标签是 0 八位组 (zero octet)。

member_label 方法可以在 union TypeCode 对象上调用。

参数:
index - 请求标签的 union 成员的索引
返回:
描述所请求 union 成员标签的 Any 对象;对于默认成员,返回 0 八位组
抛出:
Bounds - 如果索引大于等于组成 union 的成员数
BadKind - 如果在非 union TypeCode 对象上调用该方法

discriminator_type

public abstract TypeCode discriminator_type()
                                     throws BadKind
返回描述所有非默认成员标签的 TypeCode 对象。 discriminator_type 方法只能在 union TypeCode 对象上调用。

返回:
描述非默认成员标签的 TypeCode 对象
抛出:
BadKind - 如果在非 union TypeCode 对象上调用该方法

default_index

public abstract int default_index()
                           throws BadKind
返回默认成员的索引,如果没有默认成员,则返回 -1。

default_index 方法只能在 union TypeCode 对象上调用。

返回:
默认成员的索引;如果没有默认成员,则返回 -1
抛出:
BadKind - 如果在非 union TypeCode 对象上调用该方法

length

public abstract int length()
                    throws BadKind
返回此 TypeCode 对象所描述类型中的成员数。对于 string 和 sequence,该方法返回一个范围,0 指示无界的 string 或 sequence。对于 array,此方法返回其成员数。

length 方法可以在 string、sequence 和 array TypeCode 对象上调用。

返回:
string 和 sequence 的范围,或者 array 的成员数
抛出:
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

content_type

public abstract TypeCode content_type()
                               throws BadKind
返回表示此 TypeCode 对象所描述成员 IDL 类型的 TypeCode 对象。对于 sequence 和 array,该方法返回元素类型。对于 alias,该方法返回原始类型。注意,多维 array 用嵌套 TypeCode 对象表示,每个维度一个对象。对于 boxed valuetype,该方法返回 boxed 类型。

content_type 方法可以在 sequence、array、alias 和 boxed valuetype TypeCode 对象上调用。

返回:
一个 TypeCode 对象,它对于 sequence 和 array 表示元素类型;对于 alias 表示原始类型;对于 boxed valuetype 表示 boxed 类型。
抛出:
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

fixed_digits

public abstract short fixed_digits()
                            throws BadKind
返回此 TypeCode 对象所描述的 fixed 类型中数字的数量。例如,数字 3000.275d 的 typecode 是 fixed<7,3>,其中 7 是精确度,3 是标度。

返回:
数字的总数
抛出:
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

fixed_scale

public abstract short fixed_scale()
                           throws BadKind
返回此 TypeCode 对象所描述的 fixed 类型的标度。正数指示小数点右边的数字个数。例如,数字 3000d 的 typecode 是 fixed<4,0>,其中第一个数字是精度,第二个数字是标度。出现负数也是有可能的,在小数点的左边添加 0 即可。在这种情况下, fixed<1,-3> 是数字 3000d 的 typecode。

返回:
TypeCode 对象所描述 fixed 类型的标度
抛出:
BadKind - 如果在不适当的 TypeCode 对象种类上调用该方法

member_visibility

public abstract short member_visibility(int index)
                                 throws BadKind,
                                        Bounds
返回一个常量,它指示位于给定索引处的成员的可见性。 此操作只能在非 boxed value TypeCode 对象上调用。

参数:
index - 指示 value 中索引的 int
返回:
PRIVATE_MEMBER.valuePUBLIC_MEMBER.value
抛出:
BadKind - 如果在非 value 类型 TypeCode 对象上调用此方法
Bounds - 如果给定索引超出范围
另请参见:
CORBA 包中有关未实现特性的注释

type_modifier

public abstract short type_modifier()
                             throws BadKind
返回一个常量,它指示此 TypeCode 对象所描述的 value 类型的修饰符。返回的常量必须是以下常量之一: VM_NONE.valueVM_ABSTRACT.valueVM_CUSTOM.valueVM_TRUNCATABLE.value

返回:
描述此 TypeCode 对象所描述 value 类型的常量
抛出:
BadKind - 如果在非 value 类型 TypeCode 对象上调用此方法
另请参见:
CORBA 包中有关未实现特性的注释

concrete_base_type

public abstract TypeCode concrete_base_type()
                                     throws BadKind
返回一个 TypeCode 对象,它描述此 TypeCode 对象所描述 value 类型的具体基本类型。如果没有具体基本类型,则返回 null。

返回:
一个 TypeCode 对象,它描述此 TypeCode 对象所描述 value 类型的具体基本类型
抛出:
BadKind - 如果在非 boxed value 类型 TypeCode 对象上调用此方法
另请参见:
CORBA 包中有关未实现特性的注释