如何为单个EMF EObject实例添加专属boolean标记属性?
可行方案:使用EMF实例级用户数据
完全可以实现仅给单个EObject实例添加标记,且不修改其eClass()。EMF本身提供了实例级用户数据存储的机制,无需修改元模型或类结构,具体实现如下:
存储标记:调用EObject的
eSetUserData方法,将自定义键和布尔值关联到实例// 定义自定义键,建议用唯一字符串避免冲突 String READY_KEY = "readyToBeProcessed"; eObject.eSetUserData(READY_KEY, true);获取标记:通过
eGetUserData读取存储的值,注意处理null情况Boolean isReady = (Boolean) eObject.eGetUserData(READY_KEY); boolean readyToBeProcessed = isReady != null ? isReady : false;
这种方式的核心优势:
- 仅作用于当前EObject实例,同
eClass()的其他对象不受任何影响 - 完全不修改元模型(
eClass()的结构保持不变) - 实现简单,无需创建EAnnotation或EAttribute这类会修改类结构的元素
如果需要更类型安全的封装,可封装成工具类避免重复代码:
public class EObjectMarkers { private static final String READY_KEY = "readyToBeProcessed"; public static void markAsReady(EObject eObject) { eObject.eSetUserData(READY_KEY, true); } public static boolean isReadyToBeProcessed(EObject eObject) { return Boolean.TRUE.equals(eObject.eGetUserData(READY_KEY)); } }
内容的提问来源于stack exchange,提问作者gekefe
相关产品推荐
相关产品推荐

