快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

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

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

除了普通的类(接口)以外,在类图里可以定义一些特殊的元素,比较常见的是枚举类型 、自定义类型,它们对于一个完整可用的模型也是必不可少的,这篇帖子主要介绍EMF里它们 的使用方法。另外,由于EMF对Map的支持比较特别,所以在这里也简要介绍一下Map类型的定 义方法。

枚举类型

继续前面帖子的例子,现在要为产品增加一个评分属性,评分值可以是好中差之一,像这 样属性值只能是有限几个值之一的属性就应该定义为枚举类型(Enumeration)。在类图里首 先创建一个名为Score的枚举类型,然后为它增加三个可选值,每个值对应一个唯一的整数值 作为标识;然后给 Product类型添加一个名为score的属性,这时的类型列表里已经比原来多 了Score类型,我们就选择它作为score属性的类型。重新生成一遍代码,你会发现增加了 Score类(不是接口),运行新生成的编辑器会看到,产品对象的属性里增加了评级,见图1 。

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

图1 枚举类型的属性以下拉列表方式编辑

自定义类型

EMF虽然对大多数java类型做了包装,但是有些情况需要我们使用没有被包含的类型,例 如在设计图形化的编辑器(例如类图编辑器)时,图形节点一般允许选择背景颜色,这就需 要一个org.eclipse.swt.graphics.RGB类型的成员变量,而RGB类是SWT提供的类,所以不能 通过创建一个同名类的方式实现,这时就要使用自定义类型。类似的道理,在必须利用遗产 项目(Legacy)代码的时候,自定义类型也是必须的。

现在为Product节点增加这样一个名为background的成员变量,步骤如下:首先在类图上 新建一个名为RGB的自定义类型(data- type,见图2),将它的Instance Class属性设置为 org.eclipse.swt.graphics.RGB;然后给Product类添加一个成员变量background,类型选择 为刚建立的RGB;现在重新生成一遍代码,可以看到Product.java里已经多了这个成员变量, 其类型为 org.eclipse.swt.graphics.RGB(因为org.eclipse.swt.graphics.RGB是属于 org.eclipse.swt这个插件的,所以要为com.my.shop项目增加对org.eclipse.swt的依赖才能 正确编译)。

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

图2 新建自定义类型

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

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

不过到这里还没有完成全部工作。以为EMF对这个RGB类一无所知 ,所以它不可能为我们实现RGB对象的持久化,即将RGB类型的数据保存到(缺省格式的)xml 文件中。要解决这个问题得在生成的ShopFactoryImpl里做一些定制,具体来说是修改 createRGBFromString ()和convertRGBToString()这两个方法,很明显它们的作用分别是从 字符串创建RGB对象以及将RGB对象转换成字符串,我们把它们改为下面这样。

/** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public RGB createRGBFromString (EDataType eDataType, String initialValue) {   String[] values = initialValue.split(",");   int red=Integer.parseInt(values [0]);   int green=Integer.parseInt(values[1]);   int blue=Integer.parseInt(values[2]);   RGB rgb = new RGB(red,green,blue);   return rgb; }    /** * <!-- begin-user-doc -- > * <!-- end-user-doc --> * @generated NOT */ public String convertRGBToString(EDataType eDataType, Object instanceValue) {    RGB rgb = (RGB) instanceValue;   return rgb.red + "," + rgb.green + "," + rgb.blue; }

这些代码可以把RGB对象转 换为形如“255,90,150”的格式,EMF在持久化时

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号