Установить значение, зная EObject и его EAttribute
Я хочу установить стоимость объекта 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 ответ
EMF уже имеет свои собственные механизмы самоанализа, которые не используют Java Reflection, но используют статический сгенерированный код.
Что вам нужно, это:
object.eSet(attribute, value);
Если атрибут представляет собой отношение "многие", например List
, вам нужно получить список до, а затем добавить содержимое в список:
if (attribute.isMany()) {
List<Object> list = (List<Object>) object.eGet(attribute);
list.addAll(value);
}
Если у вас нет EAttribute
но есть имя атрибута (как String
) вы также можете получить EStructuralFeature
по имени, используя EClass
метаданные:
EStructuralFeature feature = object.eClass.getEStructuralFeature(attributeName);
object.eSet(feature, value);
Вам следует обратиться к EObject API, в частности к методам, начинающимся с "e". EcoreUtil
Класс также имеет полезные методы.