快速业务通道

EMF介绍系列(四、枚举类型、自定义类型和Map) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
遇到RGB类型的对象就按这样的 格式写到文件里。

使用EMap

在类图里可以指定各种类型的成员变量,但使用Map类型则有点特别,直接定义一个EMap 类型的成员变量是不可以的,因为EMap并不是继承自 java.util.Map而是EList,也就是说 EMF使用EList来模拟实现Map的功能(为什么要这样实现我还没弄清楚)。要实现一个EMap 类型的成员变量,在类图里要参考下面的方式进行定义。

现在我们要为产品类增加一个EMap类型的属性,用这个属性来记录产品每月的销售数量, 它维护一个日期字符串(如"2005-09")到当月销售数量的映射。首先,定义一个名为 StringToIntegerMapEntry的新类,这个类将作为Map里的项(Entry);为这个类增加两个属 性:字符串类型的key和整数类型(Integer或int均可)的value;在属性视图里把这个类的 Instance Class Name属性设置为java.util.Map$Entry;这样MapEntry类就定义好了,在需 要EMap类型变量的类里引用它就可以了,注意对它的引用必须是包含关系(即“组合”而非 “聚合”,类图上连接线用黑色菱形修饰),并且是一对多的。

重新生成一遍代码,在Product接口里salesMap成员变量是这样定义的(因为EMF会检测到 我们正在定义一个Map):

/** * Returns the value of the ''<em><b>Sales Map</b></em>'' map. * The key is of type {@link java.lang.String}, * and the value is of type {@link java.lang.Integer}, * <!-- begin-user-doc --> * <p> * If the meaning of the ''<em>Sales Map</em>'' containment reference isn''t clear, * there really should be more of a description here * </p> * <!-- end-user-doc --> * @return the value of the ''<em>Sales Map</em>'' map. * @see com.my.shop.ShopPackage#getProduct_SalesMap() * @model mapType="com.my.shop.StringToIntegerMapEntry" keyType="java.lang.String" valueType="java.lang.Integer" * @generated */ EMap getSalesMap();

EMF介绍系列(四、枚举类型、自定义类型和Map)(3)

时间:2011-04-30 博客园 bjzhanghao

这样,在生成的编辑器里可以对每个产品增加新的项,每项包含key和value两个值;在程 序里,则应该使用 Product#getSalesMap().put()方法向这个Map里增加数据,因为我们定义 的Map项是字符串到整数类型的,所以put()的时候value参数必须是整数对象 (java.lang.Integer),否则会抛出ClassCastException。请记住,不要直接指定 EMap类 型,包含MapEntry即可,如果key或value不是普通类型,则使用名为key或value的引用。

EMF介绍系列(四、枚举类型、自定义类型和Map) - 编程入门网

图3 编辑器里的EMap类型属性

经过上面几处改动,现在我们的商店模型如下图所示,点此下载项目打包。

EMF介绍系列(四、枚举类型、自定义类型和Map) - 编程入门网

图4 修改后的模型

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号