引言:
Zeroc Ice支持元语的句法,即metadata sytax。还是那句老话,“是利剑,也是毒药。”元语的使用,在 Ice manual 3.4
中有详细介绍,本文不做详述。只挑最有诱惑地Generics & Collections的元语做以说明。
正文:
(1)ArrayList<T>语法模型
["java:type:java.util.ArrayList<MyTypeClass>"]
sequence<::MyTypeClass> arrayList;
这样slice2java编译后,便可在java侧生成基于ArrayList<MyTypeClass>的arraylist。
(2)实际应用
在实际使用时,大多数情况下“MyTypeClass”是自定义的,而且跟当前arraylist不在同一个包下。完善一下slice定义,可以如下。
// create by:hanjianxin
// at:11-08-02 16:40, for SOS
// resolve & comment by: zhaoningbo 11-08-03
#ifndef BOND__DEF
#define BOND__DEF
[["java:package:com.ccxe.bond.credit"]]
module dto {
struct BondIssueInformationCountDto{
string bondcode;
string id;
// ...
string crOrgName;
};
};
module service {
// *Attention please: when we use 'metadata', we recommend
// to use the full name of the Java Class. Just like the following!
// That because 'slice2java' has a tiny bug, which may do not fill
// the T , just in Generics<T>, with this full name. So ours code
// goes red.
["java:type:java.util.ArrayList<com.ccxe.bond.credit.dto.
BondIssueInformationCountDto>"]
sequence<dto::BondIssueInformationCountDto> listBondIssueInformationCountDto;
interface BondIssueInformationCountService{
//method
listBondIssueInformationCountDto getCreditOrgListFromBondCredit();
};
};
#endif
需要注意几点:
1,第7行为包声明元语。(省了一堆module~。=)
2,第23行为本文ArrayList<T>声明元语。使用时请注意,元语体中的所有类型均为java侧的类型(因为使用的
“java:type:”),因此“BondIssueInformationCountDto”可写为
“BondIssueInformationCountDto”或者
“com.ccxe.bond.credit.dto.BondIssueInformationCountDto”,但绝不能为
“dto::BondIssueInformationCountDto”。原因是两处定义的识别者不同。
3,第23行,特别注意“BondIssueInformationCountDto”为了slice2java生成的java文件安全可靠,必须用类的
全名“com.ccxe.bond.credit.dto.BondIssueInformationCountDto”。否则生成的文件可能会出现如下
的结果,而报错,却又不能手工导包(slice2java设计原因)。
public static java.util.List<com.ccxe.bond.credit.dto.
BondIssueInformationCountDto>
read(IceInternal.BasicStream __is)
{
java.util.List<com.ccxe.bond.credit.dto.
BondIssueInformationCountDto> __v;
// full name, OK!
// __v = new java.util.ArrayList
// <com.ccxe.bond.credit.dto.BondIssueInformationCountDto>();
// short name, ERROR! no import package, can not resovle as a type.
__v = new java.util.ArrayList<BondIssueInformationCountDto>();
// ....
return __v;
}
由上段代码可以看出,必须用类全名。
补充:
1,关于Ice slice, IceBox, IceGrid 及相关简单样例,你可以在google code上以svn免费获得。
2,在线浏览地址 numberIceDemo
。(本文样例路径:/numberIceSliceDemo/slice/com/number/temp/bondList.ice)
分享到:
相关推荐
eclipse Slice2Java 控件 jar ,eclipse Slice2Java 控件 jar
NULL 博文链接:https://zhaoningbo.iteye.com/blog/1071365
NULL 博文链接:https://zhaoningbo.iteye.com/blog/1135564
slice2js 将Slice文件编译为JavaScript。 安装 npm install slice2js --save-dev 用法 var slice2js = require ( 'slice2js' ) ; 方法 slice2js.compile(args [, options]) 返回一个对象。 args Array 传递给...
片 Slice是一个Java库,用于有效地处理堆内存和堆外内存。
Philips 机器进行BOLD-fMRI扫描时的扫描顺序选择卡说明,建议扫描前阅读,使用适当的slice order,也有利于在以后进行数据处理时输入正确的slice order
西门子S7-1200PLC使用Slice方式对变量进行寻址
string和slice.go
H.264视频编码标准的特点出发,提出了基于Slice级别的H.264视频编码并行算法,该算法不仅能够保证节点间的负载平衡,减少 各节点间数据的依赖关系,还充分利用了已有的计算能力。最后给出了在曙光3000上的实验结果...
用r语言进行简单的切片mcmc抽样,切片抽样属于马氏链蒙特卡洛方法
与C++相比,Go并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。Go 2.0版本将支持泛型,对于断言的存在,则持...
Cut&Slice me 切图神器(PhotoShop强力割图插件)
720p多slice h264裸流,可用于rtmp和rtsp推流测试
多媒体技术 H.264 Slice级流程图
2009年的一个x264的vfw版本,开源x264vfw版本已经不更新了,这里加入的多线程支持,slice大小控制在1000字节左右(这样打RTP包方便) 1c61eab4aef4.rar:原始当到的x264版本 win32_pthreads.2.rar:win32下的pthread...
计算h264码流slice的数目及大小,码流文件需自己改,不区分SPS、PPS,可能有误差
代码如下:slice函数的用法:slice(a, b) 截取 数组 a 到 b 之间的元素组成新数组 截取到的元素为 a, a+1, …, b-1 删除数组中元素a到元素b的方法是: 合并元素a之前的元素与元素b起的元素; function...
可以使用
轻松在golang中处理slice的库
包含sps、slice、nal unit解析,跨平台,支持makefile、VS2017