基于反射机制的 EMF 模型比较
2010-07-06 00:00:00 来源:WEB开发网图 2. EObject 接口
图 2 所示为 EObject 接口,其中 EMF 提供的反射方法有 eGet(),eSet(),eUnset() 和 eIsSet(),由于 EObject 接口是所有 EMF 建模类型必须实现的接口,所以所有 EMF 对象都可以使用反射 API 方法,这是本文阐述的实现比较 EMF 对象解决方案的基石。对这五个反射方法的解释如下:
Object eGet(EStructuralFeature)方法将返回 EStructuralFeature 表示属性的值,等同于调用 Object eGet(EStructuralFeature,true) 方法。
Object eGet(EStructuralFeature,boolean)方法的 boolean 参数用来指定是否在返回之前解析并加载代理(Proxies)的引用对象。关于 EMF 的代理 (Proxy) 请参阅参考文档扩展阅读。
eSet(EStructuralFeature,Object)方法将参数中的 Object 对象设置为指定属性的新值。
eIsSet(EStructuralFeature)方法返回一个布尔值表示一个属性是否已经被设置值。
eUnSet(EStructuralFeature)方法可以用来重置或取消一个属性的值。
用 EMF 反射实现对象按字段值比较
本章阐述如何得到 EStructuralFeature 对象,并通过 EMF 对象的反射方法读取字段的值。对于取得的值,区别其是简单类型还是组合类型,之后分别进行比较。
运用反射 API 读取对象的字段值
本文用 EObject 对象的 eGet(EStructuralFeature) 方法读取 EObject 对象的值。首先,需要得到该方法的参数 EstructuralFeature。EMF 将模型类型的字段相关描述信息集中放置到实现 EPackage 接口的类内部。EMF 代码生成工具会为建模模型生成 EPackage 的子接口,由这个接口的静态变量 eINSTANCE 得到它的实例,将其作为 eGet 方法的参数即可得到相应的值。代码如清单 1 所示:
更多精彩
赞助商链接