是否可以使用字符串文字设置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"));

10-08 08:52