WEB开发网
开发学院软件开发Java 基于反射机制的 EMF 模型比较 阅读

基于反射机制的 EMF 模型比较

 2010-07-06 00:00:00 来源:WEB开发网   
核心提示: 清单 1. 使用反射 API 的代码与非反射代码的示例EStructuralFeaturefeature=ModelPackage.eINSTANCE.getNodeElement_Description();ObjectremoteValue=remote.eGet(feature);Obje

清单 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 关系图
基于反射机制的 EMF 模型比较

查看原图(大图)

图 3 描述了 EClass, EAttribute, EReference 和 EDataType 的关系,可知 EReference 类型的 eReferenceType 总是一个 EClass 的组合类型,EAttribute 的类型则总是一个简单类型。这有利于了解区分简单类型和组合类型的方法,也便于理解 EMF 对建模模型的描述,从而更好的运用 EMF 反射 API。于是,本文使用清单 2 代码所示的方法区分类型是简单还是组合,如下:

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:基于 反射 机制

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接