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

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

 2010-07-06 00:00:00 来源:WEB开发网   
核心提示: 当确定两个对象具有可比性之后,需要遍历字段列表 _featureList,基于反射机制的 EMF 模型比较(8),获取并比较两个对象中相同字段的值,因为需要比较的字段来自不同的建模类,在比较之后需要更新备忘录,比较器发现两个对象的不同便生成一个 CompareInfo 对象,并且本例中这些字段被

当确定两个对象具有可比性之后,需要遍历字段列表 _featureList,获取并比较两个对象中相同字段的值。因为需要比较的字段来自不同的建模类,并且本例中这些字段被放置在一个列表内,所以需要判断某字段是否可以用于一个对象的方法。清单 6 列出了完成这一功能的代码片断,函数 isSuitable() 递归遍历一个类型及其所有超类型,判断参数 feature 是否适用于此对象。

清单 6. 判断一个 EStructuralFeature 是否适用于一个对象

public static boolean isSuitable(EObject eo, EStructuralFeature feature) 
  { 
    if (eo == null) 
      return false; 
    return isSuitable(eo.getClass(), feature); 
  } 
  private static boolean isSuitable(Class c, EStructuralFeature feature) 
  { 
    Class[] interfaces = c.getInterfaces(); 
    for (int m = 0; m < interfaces.length; m++) 
    { 
      if (interfaces[m] == feature.getContainerClass() 
          || isSuitable(interfaces[m], feature)) 
      { 
        return true; 
      } 
    } 
    return false; 
  } 

如果一个 EStructuralFeature 适用于两个对象,则用 eGet() 方法获取两个对象在该字段的值并进行比较。通过 EMF 反射 API 取值和根据得到值的不同类型进行比较的细节同第 3 章。ModelComparePort 类的列表类型变量 _comparedNodes 是用作记录已经比较过节点的备忘录,在进行比较之前需要查阅备忘录避免重复比较,在比较之后需要更新备忘录。比较器发现两个对象的不同便生成一个 CompareInfo 对象,最终得到一个由 CompareInfo 对象组成的差异项列表,关键代码如清单 7 所示:

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

Tags:基于 反射 机制

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