是否可以使用字符串文字设置EMF中的EStructuralFeature的值?
例:
someObject.set(intFeature, "1")
someObject.set(stringFeature, "1")
在此之后,我希望intFeature的值是一个值为1的整数,而stringFeature的值包含“ 1”。
我怀疑这样的功能可用,因为EStructuralFeature :: defaultValueLiteral是一个字符串,因此也必须以某种方式对其进行解析。
最佳答案
要执行此类操作,您必须处理元模型和EFactory
。通过从setDefaultValue
中查看EStructuralFeature
,您可以看到EFactory
类型的EStructuralFeature
用于构建值(仅当EStructuralFeature
类型为EDatatype
时)。
这是一个常规代码段(我们假设有一个EObject eobj
):
// We get the estructuralfeature
EStructuralFeature feature = eobj.eClass().getEStructuralFeature("myfeature");
// Is the feature type "primitive"
if (feature.getEType() instanceof EDataType) {
EDataType dtype = (EDataType)ea.getEType();
// We get the EFactory
EFactory factory = feature.getEType().getEPackage().getEFactoryInstance();
eobj.eSet(feature, factory.createFromString(dtype, "mystringvalue"));
}
这是UML的示例:
Property p = UMLFactory.eINSTANCE.createProperty();
EStructuralFeature ea = p.eClass().getEStructuralFeature("lower");
... // if and stuffs
EFactory factory = ea.getEType().getEPackage().getEFactoryInstance();
p.eSet(ea, factory.createFromString((EDataType)ea.getEType(), "1"));