创建一个递归 TypeCode 对象,在创建包含递归的 TypeCodes 期间,该对象充当具体 TypeCode 的占位符。id 参数指定类型(递归 TypeCode 将充当该类型的占位符)的存储库 id。一旦将递归 TypeCode 正确地嵌入到对应于指定存储库 id 的封闭 TypeCode,该 TypeCode 的作用将与普通 TypeCode 一样。如果在将递归 TypeCode 嵌入封闭 TypeCode 之前对该 TypeCode 执行调用操作,则将导致 BAD_TYPECODE 异常。
例如,以下 IDL 类型声明中包含递归:Struct Node {
Sequence subnodes;
};
要为 struct Node 创建 TypeCode,应调用 TypeCode 创建操作,如下所示:String nodeID = "IDL:Node:1.0";
TypeCode recursiveSeqTC = orb.create_sequence_tc(0, orb.create_recursive_tc(nodeID));
StructMember[] members = { new StructMember("subnodes", recursiveSeqTC, null) };
TypeCode structNodeTC = orb.create_struct_tc(nodeID, "Node", members);
还要注意的是,以下是一个非法 IDL 类型声明:Struct Node {
Node next;
};
递归类型只能出现在可以为空的序列中。当在 Any 数组中传输 struct 数据时,可以通过这种方式避免编码问题。
参数:id - 所引用类型的逻辑 id返回:所请求的 TypeCode