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