基于反射机制的 EMF 模型比较
2010-07-06 00:00:00 来源:WEB开发网清单 1. 使用反射 API 的代码与非反射代码的示例
EStructuralFeature feature =ModelPackage.eINSTANCE.getNodeElement_Description();
Object remoteValue = remote.eGet(feature);
Object localValue = local.eGet(feature);
不使用反射的代码:
Object removeValue = ((NodeElement)remote).getDescription();
Object localValue = ((NodeElement)local).getDescription();
由清单 1 可见,如不使用反射 API 读取对象的值,首先需要将对象转型。当需要取值的类型很多时,转型语句会随之增多,大大增加代码书写和维护的工作量。尤其是这种取值方法必须已知被取值对象的类型,相对于使用反射 API 进行取值,这种方法是僵硬,且难于复用的。
判断简单数据类型或组合数据类型
因为要实现按值比较,所以首先要区别得到的字段值是简单数据类型还是组合数据类型。
图 3. Eclass, EAttribute, EReference, EDataType 关系图
查看原图(大图)
图 3 描述了 EClass, EAttribute, EReference 和 EDataType 的关系,可知 EReference 类型的 eReferenceType 总是一个 EClass 的组合类型,EAttribute 的类型则总是一个简单类型。这有利于了解区分简单类型和组合类型的方法,也便于理解 EMF 对建模模型的描述,从而更好的运用 EMF 反射 API。于是,本文使用清单 2 代码所示的方法区分类型是简单还是组合,如下:
更多精彩
赞助商链接