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

最佳答案

以下应该可以解决问题,但是一点都不优雅。它获取eClasseObject,并通过名称查找匹配的属性定义并进行访问。此处使用的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);

09-25 19:39