比较Ecore类和类型

时间:2013-01-13 12:39:46

标签: code-generation xtend

我想比较if-clauses中的eCore-datatypes和eCore-classes。像这样:

if(ent ==“Entity”){}

“Entity”是eCore-Class并且“ent”这个类的实际Object。

同样的问题适用于eCore数据类型。

if(ent.eType ==“EBoolean”){}

我该怎么做?目前我只将名称与字符串操作进行比较。

与此类似:

if(ent.name.toString.equals(“Entity”)){}或eType.name.toString.equals(“EBoolean”)但这对我来说只是一个临时解决方案。

这个问题还有其他可能更专业的解决方案吗?

2 个答案:

答案 0 :(得分:1)

您是否为EMF模型生成了Java类?如果是,则应该使用instanceof。

switch ent {
  Entity : {
     ...
  }
}

如果要比较EClass实例,而不是生成的EPackage中的常量,则可以使用。那将是这样的:

if (ent.eClass == MyEcorePackage::Entity) {
   ...
}

答案 1 :(得分:0)

首先过滤class类型的EObject。进一步将其分为typeof(className)

for (clazz : p.EClassifiers.filter(typeof(EClass))) {
         if (clazz.name == typeof(ClassA).simpleName) { clazz.callMethodA;
  } else if (clazz.name == typeof(ClassB).simpleName) { clazz.callMethodB; }
}

EDataTypes ...

执行相同的操作