知道EObject及其EAttribute的值

时间:2014-06-12 08:25:22

标签: java eclipse emf

我想设置一个对象EObject的值,知道它是EAttribute。那可能吗?

我可以使用反射,构建方法名称并调用它,但是有更好的方法来实现吗?也许一些EMF Util课程?

public static Object invokeMethodBy(EObject object, EAttribute attribute, Object...inputParameters){
    String attrName = attribute.getName().substring(0, 1).toUpperCase() + attribute.getName().substring(1);
    Object returnValue = null;
    try {
        returnValue = object.getClass().getMethod("set"+attrName, boolean.class).invoke(object,inputParameters);
    } catch (IllegalAccessException | IllegalArgumentException
            | InvocationTargetException | NoSuchMethodException
            | SecurityException e1) {
        e1.printStackTrace();
    }
    return returnValue;
}

1 个答案:

答案 0 :(得分:3)

EMF已经有了自己的内省机制,它不使用Java Reflection,而是使用静态生成的代码。

你需要的是:

object.eSet(attribute, value);

如果属性是"很多"关系,例如List,您需要先检索列表,然后将内容添加到列表中:

if (attribute.isMany()) {
    List<Object> list = (List<Object>) object.eGet(attribute);
    list.addAll(value);
}

如果您没有EAttribute但拥有该属性的名称(String),您还可以使用{{1}按名称检索EStructuralFeature元数据:

EClass

您应该查看EObject API,特别是以&#34; e&#34;开头的方法。 EStructuralFeature feature = object.eClass.getEStructuralFeature(attributeName); object.eSet(feature, value); 类也有用。