使用字符串文字设置 EMF EStructuralFeature

Set EMF EStructuralFeature with String Literal

是否可以使用字符串文字在 EMF 中设置 EStructuralFeature 的值?

示例:

someObject.set(intFeature, "1") 
someObject.set(stringFeature, "1")

在此之后,我希望 intFeature 的值是一个值为 1 的整数,stringFeature 的值包含“1”。

我怀疑这样的功能是可用的,因为 EStructuralFeature::defaultValueLiteral 是一个字符串,所以它也必须以某种方式进行解析。

要做这种事情,你必须处理元模型和EFactory。通过查看 EStructuralFeature 中的 setDefaultValue,您可以看到 EStructuralFeature 类型的 EFactory 用于构建值(仅当 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"));