Eclipse EMF:如何通过名称访问 EAttribute?

Leo*_*ide 5 eclipse-emf emf

我有一个传递字符串和 EMF EObject 的 Java 方法。该字符串是 EObject 的属性名称。例如,如果传递“foo”和EObject eobj,则需要访问eobj.getFoo()。我知道如何从 EAttibute 的 featureID 中获取其值,但似乎找不到通过属性名称获取它的方法。这可能吗?

Jör*_*Süß 4

下面的代码应该可以解决问题,但它一点也不优雅。它获取eClass您的eObject,按名称查找匹配的属性定义并访问它。这里使用getEAllAttributes()的还包括父类定义的属性。

    EObject eObject = null;
    String attributeName = "";
    EDataType resultingDataType = null;
    EList<EAttribute> eAllAttributes = eObject.eClass().getEAllAttributes();
    for (EAttribute eAttribute : eAllAttributes) {
        if (eAttribute.getName().equals(attributeName)) {
            resultingDataType = (EDataType) eObject.eGet(eAttribute);
        }           
    }
    System.out.println(resultingDataType);
Run Code Online (Sandbox Code Playgroud)

  • 如果您确定会获得一个属性,只需执行 `eGet(eClass.getEStructuralFeature("foo"))` 就足够了(和断言)。 (7认同)